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 the standard library]),,
314 [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes],
315 [enable_stdlib_debug=no])]
318 ### set up optimization
319 AC_ARG_ENABLE(optimization,
320 AS_HELP_STRING([--enable-optimization@<:@=ARG@:>@],[enable compiler optimisation]),,
321 enable_optimization=yes;)
322 case $enable_optimization in
324 if test $lyx_devel_version = yes ; then
330 *) lyx_optim=${enable_optimization};;
333 AC_ARG_ENABLE(assertions,
334 AS_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
335 [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
336 [enable_assertions=no])]
338 if test "x$enable_assertions" = xyes ; then
339 lyx_flags="$lyx_flags assertions"
340 AC_DEFINE(ENABLE_ASSERTIONS,1,
341 [Define if you want assertions to be enabled in the code])
344 # set the compiler options correctly.
345 if test x$GXX = xyes; then
346 dnl clang++ pretends to be g++ 4.2.1; this is not useful
347 if test x$CLANG = xno; then
348 dnl Useful for global version info
349 gxx_version=`${CXX} -dumpversion`
352 *) gxx_version=`${CXX} -dumpfullversion` ;;
354 CXX_VERSION="($gxx_version)"
356 gxx_version=clang-$clang_version
357 CXX_VERSION="($clang_version)"
360 AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS"
361 if test x$enable_debug = xyes ; then
362 AM_CXXFLAGS="-g $AM_CXXFLAGS"
364 if test $build_type = gprof ; then
365 AM_CXXFLAGS="$AM_CXXFLAGS -pg"
366 AM_LDFLAGS="$AM_LDFLAGS -pg"
368 if test $build_type = profiling ; then
369 AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
372 AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
374 dnl Warnings are for preprocessor too
375 if test x$enable_warnings = xyes ; then
376 AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
377 dnl Shut off warning -Wdeprecated-copy, which triggers too much
378 dnl note that g++ always accepts -Wno-xxx, even when -Wxxx is an error.
380 AX_CHECK_COMPILE_FLAG([-Wdeprecated-copy],
381 [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-copy"], [], [-Werror])
385 2.*|3.*|4.@<:@0-8@:>@*) AC_MSG_ERROR([gcc >= 4.9 is required]);;
387 if test x$enable_stdlib_debug = xyes ; then
388 dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
389 dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
390 if test x$lyx_cv_lib_stdcxx = xyes ; then
391 lyx_flags="$lyx_flags stdlib-debug"
392 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
393 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
394 AC_SUBST(STDLIB_DEBUG, "-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC")
396 enable_stdlib_debug=no
401 # Some additional flags may be needed
402 if test x$GXX = xyes; then
404 clang-3.0*|clang-3.1*|clang-3.2*|clang-3.3*)
405 dnl boost contains pragmas that are annoying on older clang versions
406 AM_CPPFLAGS="-Wno-unknown-pragmas $AM_CPPFLAGS";;
411 dnl Usage: LYX_USE_INCLUDED_NOD : select if the included nod should be used.
412 AC_DEFUN([LYX_USE_INCLUDED_NOD],[
413 AC_MSG_CHECKING([whether to use included nod library])
414 AC_ARG_WITH(included-nod,
415 [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])],
416 [lyx_cv_with_included_nod=$withval],
417 [lyx_cv_with_included_nod=yes])
418 AM_CONDITIONAL(USE_INCLUDED_NOD, test x$lyx_cv_with_included_nod = xyes)
419 AC_MSG_RESULT([$lyx_cv_with_included_nod])
420 if test x$lyx_cv_with_included_nod = xyes ; then
421 lyx_included_libs="$lyx_included_libs nod"
422 NOD_INCLUDES='-I$(top_srcdir)/3rdparty/nod'
426 AC_MSG_CHECKING([for nod library])
428 [AC_LANG_PROGRAM([#include <nod.hpp>],
429 [nod::scoped_connection conn;])],
430 [AC_MSG_RESULT([yes])],
432 AC_MSG_ERROR([cannot find suitable nod library (do not use --without-included-nod)])
436 AC_SUBST(NOD_INCLUDES)
439 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
441 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
442 AC_MSG_CHECKING([whether to use included boost library])
443 AC_ARG_WITH(included-boost,
444 [AS_HELP_STRING([--with-included-boost], [use the boost lib supplied with LyX])],
445 [lyx_cv_with_included_boost=$withval],
446 [lyx_cv_with_included_boost=no])
447 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
448 AC_MSG_RESULT([$lyx_cv_with_included_boost])
449 if test x$lyx_cv_with_included_boost = xno ; then
451 AC_MSG_CHECKING([for boost library])
453 [AC_LANG_PROGRAM([#include <boost/crc.hpp>],
454 [boost::crc_32_type crc;])],
455 [AC_MSG_RESULT([yes])],
457 lyx_cv_with_included_boost=yes
461 if test x$lyx_cv_with_included_boost = xyes ; then
462 lyx_included_libs="$lyx_included_libs boost"
463 BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
467 AC_SUBST(BOOST_INCLUDES)
471 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
473 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
474 AC_MSG_CHECKING([whether to use included iconv library])
475 AC_ARG_WITH(included-iconv,
476 [AS_HELP_STRING([--with-included-iconv], [use the iconv lib supplied with LyX instead of the system one])],
477 [lyx_cv_with_included_iconv=$withval],
478 [lyx_cv_with_included_iconv=no])
479 AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
480 AC_MSG_RESULT([$lyx_cv_with_included_iconv])
481 if test x$lyx_cv_with_included_iconv = xyes ; then
482 lyx_included_libs="$lyx_included_libs iconv"
484 dnl This is hardcoded to make it compile
485 AC_DEFINE([HAVE_WORKING_O_NOFOLLOW], 0, [Define to 1 if O_NOFOLLOW works.])
487 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
490 AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
491 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.15/lib/loop_wchar.h.
492 if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
497 AC_SUBST([USE_MBSTATE_T])
498 AC_CACHE_CHECK([whether <wchar.h> is standalone],
499 [gl_cv_header_wchar_h_standalone],
505 [gl_cv_header_wchar_h_standalone=yes],
506 [gl_cv_header_wchar_h_standalone=no])])
507 if test $gl_cv_header_wchar_h_standalone = yes; then
512 AC_SUBST([BROKEN_WCHAR_H])
513 dnl we want const correctness
514 AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
515 [Define as const if the declaration of iconv() needs const.])
517 AC_SUBST([ICONV_CONST])
518 dnl we build a static lib
520 AC_SUBST([DLL_VARIABLE])
521 ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.15 -I$(top_builddir)/3rdparty/libiconv'
522 ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
523 ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.15/include/iconv.h.in
527 if test "$am_cv_func_iconv" = no; then
528 AC_MSG_ERROR([cannot find required library iconv.])
530 ICONV_LIBS="$LIBICONV"
534 AC_SUBST(ICONV_INCLUDES)
536 AC_SUBST(ICONV_ICONV_H_IN)
540 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
542 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
543 AC_MSG_CHECKING([whether to use included zlib library])
544 AC_ARG_WITH(included-zlib,
545 [AS_HELP_STRING([--with-included-zlib], [use the zlib lib supplied with LyX instead of the system one])],
546 [lyx_cv_with_included_zlib=$withval],
547 [lyx_cv_with_included_zlib=no])
548 AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
549 AC_MSG_RESULT([$lyx_cv_with_included_zlib])
550 if test x$lyx_cv_with_included_zlib = xyes ; then
551 lyx_included_libs="$lyx_included_libs zlib"
552 ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
553 ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
554 mkdir -p 3rdparty/zlib
555 dnl include standard config.h for HAVE_UNISTD_H
556 echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
557 dnl prevent clash with system zlib that might be dragged in by other libs
558 echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
559 cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
562 AC_CHECK_HEADERS(zlib.h,
563 [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
564 [LYX_LIB_ERROR(zlib.h,zlib)])
566 AC_SUBST(ZLIB_INCLUDES)
571 dnl Usage: LYX_BUILD_INCLUDED_DTL : select if the included dtl should
572 dnl be built and installed.
573 AC_DEFUN([LYX_BUILD_INCLUDED_DTL],[
574 AC_MSG_CHECKING([whether to build dv2dt and dt2dv])
575 AC_ARG_WITH(included-dtl,
576 [AS_HELP_STRING([--with-included-dtl], [build and install the dv2dt and dt2dv programs supplied with LyX])],
577 [lyx_cv_with_included_dtl=$withval],
578 [lyx_cv_with_included_dtl=no])
579 AM_CONDITIONAL(BUILD_INCLUDED_DTL, test x$lyx_cv_with_included_dtl = xyes)
580 AC_MSG_RESULT([$lyx_cv_with_included_dtl])
581 if test x$lyx_cv_with_included_dtl = xyes ; then
582 lyx_flags="$lyx_flags build-dtl"
586 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
587 dnl necessary APIs are available to print callstacks.
588 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
589 [AC_ARG_ENABLE([callstack-printing],
590 [AS_HELP_STRING([--disable-callstack-printing],[do not print a callstack when crashing])],
591 lyx_cv_callstack_printing=$enableval, lyx_cv_callstack_printing=yes)
593 if test x"$lyx_cv_callstack_printing" = xyes; then
594 AC_CACHE_CHECK([whether printing callstack is possible],
595 [lyx_cv_callstack_printing],
596 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
597 #include <execinfo.h>
601 size_t size = backtrace(array, 200);
602 backtrace_symbols(array, size);
604 abi::__cxa_demangle("abcd", 0, 0, &status);
605 ]])],[],[lyx_cv_callstack_printing=no])])
607 if test x"$lyx_cv_callstack_printing" = xyes; then
608 AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
609 [Define if callstack can be printed])
610 lyx_flags="$lyx_flags callback-printing"
611 AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"
616 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
618 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
619 AC_ARG_WITH(included-mythes,
620 [AS_HELP_STRING([--with-included-mythes], [force to use the MyThes lib supplied with LyX])],
621 [use_included_mythes=$withval],
622 [use_included_mythes=no])
623 if test x$use_included_mythes != xyes ; then
625 use_included_mythes=yes
626 AC_CHECK_HEADERS([mythes.hxx mythes/mythes.hxx],
627 [mythes_h_location="<$ac_header>"
629 AC_MSG_CHECKING([checking for MyThes library])
630 for ac_lib in mythes mythes-1.2 ; do
631 LIBS="-l$ac_lib $save_LIBS"
633 [AC_LANG_PROGRAM([#include <cstdio>]
634 [#include $mythes_h_location], [MyThes dummy("idx","dat")])],
635 [MYTHES_LIBS=-l$ac_lib
636 AC_MSG_RESULT([$MYTHES_LIBS])
637 use_included_mythes=no])
639 if test $use_included_mythes != no ; then
640 AC_MSG_RESULT([not found])
645 if test $use_included_mythes = yes ; then
646 mythes_h_location="<mythes.hxx>"
647 MYTHES_INCLUDES='-I$(top_srcdir)/3rdparty/mythes/1.2.5/'
648 MYTHES_LIBS='$(top_builddir)/3rdparty/mythes/liblyxmythes.a'
649 lyx_included_libs="$lyx_included_libs mythes"
651 AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$use_included_mythes = xyes)
652 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$mythes_h_location,[Location of mythes.hxx])
653 AC_SUBST(MYTHES_INCLUDES)
654 AC_SUBST(MYTHES_LIBS)
655 AC_MSG_CHECKING([whether to use included MyThes library])
656 AC_MSG_RESULT([$use_included_mythes])
660 dnl Usage: LYX_CHECK_MACOS_DEPLOYMENT_TARGET : select the macos deployment target
661 dnl [default-auto-value])
662 dnl Assign the macosx-version-min value for compiler, linker and Info.plist.
663 dnl Default is dynamic - depends on used Qt library version.
664 AC_DEFUN([LYX_CHECK_MACOS_DEPLOYMENT_TARGET],[
665 AC_ARG_WITH(macos-deployment-target,
666 [AS_HELP_STRING([--with-macos-deployment-target], [force the macos deployment target for LyX])],
667 [macos_deployment_target=$withval],
668 [macos_deployment_target=auto])
669 if test "${macos_deployment_target}" = "auto" ; then
670 macos_deployment_target="10.10"
671 case "$QTLIB_VERSION" in
673 macos_deployment_target="10.12"
676 macos_deployment_target="10.14"
680 AM_CPPFLAGS="-mmacosx-version-min=$macos_deployment_target $AM_CPPFLAGS"
681 AM_LDFLAGS="-mmacosx-version-min=$macos_deployment_target $AM_LDFLAGS"
682 AC_SUBST(macos_deployment_target,"${macos_deployment_target}")
683 AC_MSG_CHECKING([the macos deployment target for LyX])
684 AC_MSG_RESULT([$macos_deployment_target])
688 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
689 dnl [default-yes-value])
690 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
691 dnl resulting directory name in 'dir-var-name'.
692 AC_DEFUN([LYX_WITH_DIR],[
693 AC_ARG_WITH($1,[AS_HELP_STRING([--with-$1],[specify $2])])
694 AC_MSG_CHECKING([for $2])
695 if test -z "$with_$3"; then
696 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
698 test "x$with_$3" = xyes && with_$3=$5
701 AC_MSG_RESULT($lyx_cv_$3)
705 dnl Usage: LYX_LOOP_DIR(value,action)
706 dnl Executes action for values of variable `dir' in `values'. `values' can
707 dnl use ":" as a separator.
708 AC_DEFUN([LYX_LOOP_DIR],[
709 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
710 for dir in `eval "echo $1"`; do
711 if test ! "$dir" = NONE; then
712 test ! -d "$dir" && AC_MSG_ERROR(['$dir' is not a directory])
720 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
722 AC_DEFUN([LYX_ADD_LIB_DIR],[
724 if test "`(uname) 2>/dev/null`" = SunOS &&
725 uname -r | grep '^5' >/dev/null; then
726 if test $GXX = yes ; then
727 $1="${$1} -Wl[,]-R$2"
734 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
736 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
738 ### Check for a headers existence and location iff it exists
739 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
740 ## It almost works. I've tried a few variations but they give errors
741 ## of one sort or other: bad substitution or file not found etc. The
742 ## actual header _is_ found though and the cache variable is set however
743 ## the reported setting (on screen) is equal to $ac_safe for some unknown
745 ## Additionally, autoheader can't figure out what to use as the name in
746 ## the config.h.in file so we need to write our own entries there -- one for
747 ## each header in the form PATH_HEADER_NAME_H
749 AC_DEFUN([LYX_PATH_HEADER],
750 [ AC_CHECK_HEADER($1,[
751 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
752 ### the only remaining problem is getting the second parameter to this
753 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
754 ### of $ac_safe being printed.
755 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
756 [ cat > conftest.$ac_ext <<EOF
757 #line __oline__ "configure"
758 #include "confdefs.h"
762 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
763 grep $1 2>/dev/null | \
764 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
765 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
767 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
769 ### end of LYX_PATH_HEADER
771 ## Check what kind of packaging should be used at install time.
772 ## The default is autodetected.
773 AC_DEFUN([LYX_USE_PACKAGING],
774 [AC_MSG_CHECKING([what packaging should be used])
775 AC_ARG_WITH(packaging,
776 [AS_HELP_STRING([--with-packaging=STR], [set packaging for installation among:
777 posix, windows, macosx, haiku (default is autodetected)])],
778 [lyx_use_packaging="$withval"], [
780 *-apple-darwin*) lyx_use_packaging=macosx ;;
781 *-pc-mingw*) lyx_use_packaging=windows ;;
782 *-mingw32*) lyx_use_packaging=windows ;;
783 *haiku*) lyx_use_packaging=haiku ;;
784 *) lyx_use_packaging=posix ;;
786 AC_MSG_RESULT($lyx_use_packaging)
787 lyx_install_posix=false
788 lyx_install_macosx=false
789 lyx_install_cygwin=false
790 lyx_install_windows=false
791 case $lyx_use_packaging in
792 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
793 PACKAGE=LyX${version_suffix}
794 default_prefix="/Applications/${PACKAGE}.app"
795 AC_SUBST(osx_bundle_program_name,"${program_base_name}")
796 bindir='${prefix}/Contents/MacOS'
797 libdir='${prefix}/Contents/Resources'
798 datarootdir='${prefix}/Contents/Resources'
799 pkgdatadir='${datadir}'
800 mandir='${datadir}/man'
801 lyx_install_macosx=true ;;
802 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
803 PACKAGE=LyX${version_suffix}
804 default_prefix="C:/Program Files/${PACKAGE}"
805 bindir='${prefix}/bin'
806 libdir='${prefix}/Resources'
807 datarootdir='${prefix}/Resources'
808 pkgdatadir='${datadir}'
809 mandir='${prefix}/Resources/man'
810 lyx_install_windows=true ;;
811 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
812 PACKAGE=lyx${version_suffix}
813 program_suffix=$version_suffix
814 pkgdatadir='${datadir}/${PACKAGE}'
815 default_prefix=$ac_default_prefix
817 *cygwin*) lyx_install_cygwin=true ;;
818 *apple-darwin*) lyx_install_macosx=true ;;
820 lyx_install_posix=true ;;
821 haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
822 PACKAGE=lyx${version_suffix}
823 program_suffix=$version_suffix
824 pkgdatadir='${datadir}/${PACKAGE}'
825 default_prefix=$ac_default_prefix
826 lyx_install_posix=true ;;
827 *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
829 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
830 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
831 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
832 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
834 AC_SUBST(program_suffix)
838 ## ------------------------------------------------------------------------
839 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
840 ## one or two arguments.
842 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
843 ## ------------------------------------------------------------------------
845 AC_DEFUN([AC_FUNC_MKDIR],
846 [AC_CHECK_FUNCS([mkdir _mkdir])
847 AC_CACHE_CHECK([whether mkdir takes one argument],
848 [ac_cv_mkdir_takes_one_arg],
849 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
850 #include <sys/stat.h>
854 ]], [[mkdir (".");]])],[ac_cv_mkdir_takes_one_arg=yes],[ac_cv_mkdir_takes_one_arg=no])])
855 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
856 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
857 [Define if mkdir takes only one argument.])
862 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
863 dnl (which may be a relative path, and need not refer to any existing
866 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
867 dnl native Win32 path name, (but with slashes, not backslashes).
869 dnl On any other system, it is simply the result which would be obtained
870 dnl if PATHNAME represented an existing directory, and the pwd command was
871 dnl executed in that directory.
872 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
874 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
875 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
876 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
878 ac_dir=`AS_DIRNAME(["$ac_dir"])`
880 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
881 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
882 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
886 dnl this is used by the macro blow to general a proper config.h.in entry
887 m4_define([LYX_AH_CHECK_DECL],
888 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
889 [Define if you have the prototype for function `$1'])])dnl`
891 dnl Check things are declared in headers to avoid errors or warnings.
892 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
893 dnl Defines HAVE_DECL_{FUNCTION}
894 AC_DEFUN([LYX_CHECK_DECL],
895 [LYX_AH_CHECK_DECL($1)
898 AC_MSG_CHECKING([if $1 is declared by header $ac_header])
899 AC_EGREP_HEADER($1, $ac_header,
901 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
906 dnl this is used by the macro below to generate a proper config.h.in entry
907 m4_define([LYX_AH_CHECK_DEF],
908 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
909 [Define to 1 if `$1' is defined in `$2'])])dnl'
911 dnl Check whether name is defined in header by using it in codesnippet.
912 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
913 dnl Defines HAVE_DEF_{NAME}
914 AC_DEFUN([LYX_CHECK_DEF],
915 [LYX_AH_CHECK_DEF($1, $2)
916 AC_MSG_CHECKING([whether $1 is defined by header $2])
917 save_CPPFLAGS=$CPPFLAGS
918 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
919 save_CXXFLAGS=$CXXFLAGS
920 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
922 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$2>]], [[$3]])],[lyx_have_def_name=yes],[lyx_have_def_name=no])
924 CXXFLAGS=$save_CXXFLAGS
925 CPPFLAGS=$save_CPPFLAGS
926 AC_MSG_RESULT($lyx_have_def_name)
927 if test "x$lyx_have_def_name" = xyes; then
928 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
932 dnl Extract the single digits from PACKAGE_VERSION and make them available.
933 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
934 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
935 AC_DEFUN([LYX_SET_VERSION_INFO],
936 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
937 lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
938 lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
939 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
940 lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
941 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
942 test "x$lyx_patch" = "x" && lyx_patch=0
943 lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
944 lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
945 AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
946 AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
947 AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
948 AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
949 AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
950 AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
953 AC_DEFUN([LYX_CHECK_WITH_SAXON],
956 AC_ARG_WITH(saxon, AS_HELP_STRING([--without-saxon],[do not install saxon library (epub export)]))
957 test "$with_saxon" = "no" && lyx_use_saxon=false
959 if $lyx_use_saxon ; then
960 AC_MSG_RESULT(Set to installing internal saxon.)
963 AM_CONDITIONAL(SAXON_INSTALL, $lyx_use_saxon)
966 AC_DEFUN([LYX_CHECK_WITH_XSLT_SHEETS],
968 lyx_use_xslt_stylesheets=true
969 AC_ARG_WITH(xslt-stylesheets, AS_HELP_STRING([--without-xslt-stylesheets],[do not install XSLT Stylesheets (epub export)]))
970 test "$with_xslt_stylesheets" = "no" && lyx_use_xslt_stylesheets=false
972 if $lyx_use_xslt_stylesheets ; then
973 AC_MSG_RESULT(Set to installing XSLT Stylesheets.)
976 AM_CONDITIONAL(XSLT_SHEETS_INSTALL, $lyx_use_xslt_stylesheets)