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, 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])
77 AC_DEFUN([LYX_CHECK_QT5],[
78 AC_MSG_CHECKING([whether Qt5 is disabled])
80 [AS_HELP_STRING([--disable-qt5],[do not use Qt5 for building])],
81 USE_QT5=$enableval, USE_QT5=yes)
82 if test x$USE_QT5 != xno ; then
91 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
92 dnl flag lyx_warning to yes.
93 AC_DEFUN([LYX_WARNING],[
94 lyx_warning_txt="$lyx_warning_txt
100 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
101 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
102 AC_DEFUN([LYX_LIB_ERROR],[
103 AC_MSG_ERROR([cannot find $1. Please check that the $2 library
104 is correctly installed on your system.])])
107 dnl Usage: LYX_CHECK_WARNINGS Displays a warning message if a LYX_WARNING
108 dnl has occurred previously.
109 AC_DEFUN([LYX_CHECK_WARNINGS],[
110 if test x$lyx_warning = xyes; then
112 === The following minor problems have been detected by configure.
113 === Please check the messages below before running 'make'.
114 === (see the section 'Problems' in the INSTALL file)
121 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
123 define(LYX_SEARCH_PROG,[dnl
124 for ac_prog in $2 ; do
125 # Extract the first word of "$ac_prog", so it can be a program name with args.
126 set dummy $ac_prog ; ac_word=$[2]
127 if test -z "[$]$1"; then
128 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
129 for ac_dir in $PATH; do
130 test -z "$ac_dir" && ac_dir=.
131 if test -f [$ac_dir/$ac_word]; then
139 if test -n "[$]$1"; then
145 test -n "[$]$1" && break
150 dnl Usage: LYX_PROG_CLANG: set CLANG to yes if the compiler is clang.
151 AC_DEFUN([LYX_PROG_CLANG],
152 [AC_CACHE_CHECK([whether the compiler is clang],
154 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
158 ]])],[lyx_cv_prog_clang=yes ; CLANG=yes],[lyx_cv_prog_clang=no ; CLANG=no])])
159 if test $CLANG = yes ; then
160 AC_CACHE_CHECK([for clang version],
161 [lyx_cv_clang_version],
163 AC_COMPUTE_INT(clang_major,__clang_major__,,[clang_noversion_=yes])
164 AC_COMPUTE_INT(clang_minor,__clang_minor__,,[clang_noversion_=yes])
165 AC_COMPUTE_INT(clang_patchlevel,__clang_patchlevel__,,[clang_noversion_=yes])
166 if test $clang_noversion = yes ; then
167 clang_version=unknown
169 clang_version=$clang_major.$clang_minor.$clang_patchlevel
171 lyx_cv_clang_version=$clang_version])
176 dnl Usage: LYX_CXX_CXX11_FLAGS(VERSION): add to AM_CXXFLAGS the best flag that
177 dnl selects C++11 mode; gives an error when C++11 mode is not found.
178 dnl VERSION is a list of years to try (e.g. 11 or {14,11}).
179 AC_DEFUN([LYX_CXX_CXX11_FLAGS],
180 [AC_CACHE_CHECK([for a good C++ mode], [lyx_cv_cxx11_flags],
181 [lyx_cv_cxx11_flags=none
182 for flag in `eval echo -std=c++$1 default -std=gnu++$1` ; do
183 if test $flag = default ; then
186 save_CPPFLAGS=$CPPFLAGS
187 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
188 save_CXXFLAGS=$CXXFLAGS
189 CXXFLAGS="$flag $AM_CXXFLAGS $CXXFLAGS"
190 dnl sample openmp source code to test
191 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
192 template <typename T>
195 static_assert(sizeof(int) <= sizeof(T), "not big enough");
198 typedef check<check<bool>> right_angle_brackets;
203 TestDeleted() = delete;
210 typedef check<int> check_type;
212 check_type&& cr = static_cast<check_type&&>(c);
214 auto d = a;]], [[]])],[lyx_cv_cxx11_flags=$flag; break],[])
215 CXXFLAGS=$save_CXXFLAGS
216 CPPFLAGS=$save_CPPFLAGS
218 if test x$lyx_cv_cxx11_flags = xnone ; then
219 AC_MSG_ERROR([Cannot find suitable mode for compiler $CXX])
221 AM_CXXFLAGS="$lyx_cv_cxx11_flags $AM_CXXFLAGS"
225 dnl Usage: LYX_CXX_USE_CALL_ONCE
226 dnl check whether we can use std::call_once and set the
227 dnl LYX_USE_STD_CALL_ONCE macro and conditional accordingly.
228 AC_DEFUN([LYX_CXX_USE_CALL_ONCE],
229 [AC_MSG_CHECKING([for std::call_once availability])
230 save_CPPFLAGS=$CPPFLAGS
231 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
232 save_CXXFLAGS=$CXXFLAGS
233 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
234 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
236 static std::once_flag flag;
238 std::call_once(flag, [](){ return; });
239 ]])],[lyx_std_call_once=yes],[lyx_std_call_once=no])
240 CXXFLAGS=$save_CXXFLAGS
241 CPPFLAGS=$save_CPPFLAGS
242 AC_MSG_RESULT([$lyx_std_call_once])
244 if test $lyx_std_call_once = yes ; then
245 AC_DEFINE([LYX_USE_STD_CALL_ONCE], 1, [define to 1 if std::call_once is supported by the compiler])
247 AM_CONDITIONAL([LYX_USE_STD_CALL_ONCE], test $lyx_std_call_once = yes)
251 dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
252 AC_DEFUN([LYX_LIB_STDCXX],
253 [AC_CACHE_CHECK([whether STL is libstdc++],
255 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include<vector>]], [[
256 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
257 this is not libstdc++
259 ]])],[lyx_cv_lib_stdcxx=yes],[lyx_cv_lib_stdcxx=no])])
263 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
264 dnl if the STL library is GNU libstdc++ and the C++11 ABI is used.
265 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
266 [AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
267 [lyx_cv_lib_stdcxx_cxx11_abi],
268 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include<vector>]], [[
269 #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
270 this is not libstdc++ using the C++11 ABI
272 ]])],[lyx_cv_lib_stdcxx_cxx11_abi=yes],[lyx_cv_lib_stdcxx_cxx11_abi=no])])
276 AC_DEFUN([LYX_PROG_CXX],
277 [AC_REQUIRE([AC_PROG_CXX])
278 AC_REQUIRE([AC_PROG_CXXCPP])
280 ### We might want to force the C++ standard.
281 AC_ARG_ENABLE(cxx-mode,
282 AS_HELP_STRING([--enable-cxx-mode],[choose C++ standard (default: 17, 14, then 11)]),,
283 [enable_cxx_mode={17,14,11}]
288 LYX_CXX_CXX11_FLAGS($enable_cxx_mode)
290 LYX_LIB_STDCXX_CXX11_ABI
291 LYX_CXX_USE_CALL_ONCE
294 if test $lyx_cv_lib_stdcxx = "yes" ; then
295 if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
296 AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
298 AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
301 if test $lyx_cv_prog_clang = "yes" ; then
302 AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
306 ### We might want to get or shut warnings.
307 AC_ARG_ENABLE(warnings,
308 AS_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
309 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $GXX = yes ; then
314 if test x$enable_warnings = xyes ; then
315 lyx_flags="$lyx_flags warnings"
318 ### We might want to disable debug
320 AS_HELP_STRING([--enable-debug],[enable debug information]),,
321 [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
324 AC_ARG_ENABLE(stdlib-debug,
325 AS_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
326 [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes],
327 [enable_stdlib_debug=no])]
330 ### set up optimization
331 AC_ARG_ENABLE(optimization,
332 AS_HELP_STRING([--enable-optimization@<:@=ARG@:>@],[enable compiler optimisation]),,
333 enable_optimization=yes;)
334 case $enable_optimization in
336 if test $lyx_devel_version = yes ; then
342 *) lyx_optim=${enable_optimization};;
345 AC_ARG_ENABLE(assertions,
346 AS_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
347 [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
348 [enable_assertions=no])]
350 if test "x$enable_assertions" = xyes ; then
351 lyx_flags="$lyx_flags assertions"
352 AC_DEFINE(ENABLE_ASSERTIONS,1,
353 [Define if you want assertions to be enabled in the code])
356 # set the compiler options correctly.
357 if test x$GXX = xyes; then
358 dnl clang++ pretends to be g++ 4.2.1; this is not useful
359 if test x$CLANG = xno; then
360 dnl Useful for global version info
361 gxx_version=`${CXX} -dumpversion`
364 *) gxx_version=`${CXX} -dumpfullversion` ;;
366 CXX_VERSION="($gxx_version)"
368 gxx_version=clang-$clang_version
369 CXX_VERSION="($clang_version)"
372 AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS"
373 if test x$enable_debug = xyes ; then
374 AM_CXXFLAGS="-g $AM_CXXFLAGS"
376 if test $build_type = gprof ; then
377 AM_CXXFLAGS="$AM_CXXFLAGS -pg"
378 AM_LDFLAGS="$AM_LDFLAGS -pg"
380 if test $build_type = profiling ; then
381 AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
384 if test x$USE_QT5 = xyes -o x$USE_QT6 = xyes; then
385 AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
387 dnl Warnings are for preprocessor too
388 if test x$enable_warnings = xyes ; then
389 AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
390 dnl Shut off warning -Wdeprecated-copy, which triggers too much
391 dnl note that g++ always accepts -Wno-xxx, even when -Wxxx is an error.
393 AX_CHECK_COMPILE_FLAG([-Wno-deprecated-copy],
394 [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-copy"], [], [-Werror])
398 2.*|3.*|4.@<:@0-8@:>@*) AC_MSG_ERROR([gcc >= 4.9 is required]);;
400 if test x$enable_stdlib_debug = xyes ; then
401 dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
402 dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
403 if test x$lyx_cv_lib_stdcxx = xyes ; then
404 lyx_flags="$lyx_flags stdlib-debug"
405 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
406 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
407 AC_SUBST(STDLIB_DEBUG, "-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC")
409 enable_stdlib_debug=no
414 # Some additional flags may be needed
415 if test x$GXX = xyes; then
417 clang-3.0*|clang-3.1*|clang-3.2*|clang-3.3*)
418 dnl boost contains pragmas that are annoying on older clang versions
419 AM_CPPFLAGS="-Wno-unknown-pragmas $AM_CPPFLAGS";;
421 dnl the more recent versions support the deprecated-register warning,
422 dnl which is very annoying with Qt4.x right now.
423 AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-register";;
428 dnl Usage: LYX_USE_INCLUDED_NOD : select if the included nod should be used.
429 AC_DEFUN([LYX_USE_INCLUDED_NOD],[
430 AC_MSG_CHECKING([whether to use included nod library])
431 AC_ARG_WITH(included-nod,
432 [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])],
433 [lyx_cv_with_included_nod=$withval],
434 [lyx_cv_with_included_nod=yes])
435 AM_CONDITIONAL(USE_INCLUDED_NOD, test x$lyx_cv_with_included_nod = xyes)
436 AC_MSG_RESULT([$lyx_cv_with_included_nod])
437 if test x$lyx_cv_with_included_nod = xyes ; then
438 lyx_included_libs="$lyx_included_libs nod"
439 NOD_INCLUDES='-I$(top_srcdir)/3rdparty/nod'
443 AC_MSG_CHECKING([for nod library])
445 [AC_LANG_PROGRAM([#include <nod.hpp>],
446 [nod::scoped_connection conn;])],
447 [AC_MSG_RESULT([yes])],
449 AC_MSG_ERROR([cannot find suitable nod library (do not use --without-included-nod)])
453 AC_SUBST(NOD_INCLUDES)
456 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
458 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
459 AC_MSG_CHECKING([whether to use included boost library])
460 AC_ARG_WITH(included-boost,
461 [AS_HELP_STRING([--with-included-boost], [use the boost lib supplied with LyX])],
462 [lyx_cv_with_included_boost=$withval],
463 [lyx_cv_with_included_boost=no])
464 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
465 AC_MSG_RESULT([$lyx_cv_with_included_boost])
466 if test x$lyx_cv_with_included_boost = xno ; then
468 AC_MSG_CHECKING([for boost library])
470 [AC_LANG_PROGRAM([#include <boost/crc.hpp>],
471 [boost::crc_32_type crc;])],
472 [AC_MSG_RESULT([yes])],
474 lyx_cv_with_included_boost=yes
478 if test x$lyx_cv_with_included_boost = xyes ; then
479 lyx_included_libs="$lyx_included_libs boost"
480 BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
484 AC_SUBST(BOOST_INCLUDES)
488 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
490 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
491 AC_MSG_CHECKING([whether to use included iconv library])
492 AC_ARG_WITH(included-iconv,
493 [AS_HELP_STRING([--with-included-iconv], [use the iconv lib supplied with LyX instead of the system one])],
494 [lyx_cv_with_included_iconv=$withval],
495 [lyx_cv_with_included_iconv=no])
496 AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
497 AC_MSG_RESULT([$lyx_cv_with_included_iconv])
498 if test x$lyx_cv_with_included_iconv = xyes ; then
499 lyx_included_libs="$lyx_included_libs iconv"
501 dnl This is hardcoded to make it compile
502 AC_DEFINE([HAVE_WORKING_O_NOFOLLOW], 0, [Define to 1 if O_NOFOLLOW works.])
504 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
507 AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
508 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.15/lib/loop_wchar.h.
509 if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
514 AC_SUBST([USE_MBSTATE_T])
515 AC_CACHE_CHECK([whether <wchar.h> is standalone],
516 [gl_cv_header_wchar_h_standalone],
522 [gl_cv_header_wchar_h_standalone=yes],
523 [gl_cv_header_wchar_h_standalone=no])])
524 if test $gl_cv_header_wchar_h_standalone = yes; then
529 AC_SUBST([BROKEN_WCHAR_H])
530 dnl we want const correctness
531 AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
532 [Define as const if the declaration of iconv() needs const.])
534 AC_SUBST([ICONV_CONST])
535 dnl we build a static lib
537 AC_SUBST([DLL_VARIABLE])
538 ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.15 -I$(top_builddir)/3rdparty/libiconv'
539 ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
540 ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.15/include/iconv.h.in
544 if test "$am_cv_func_iconv" = no; then
545 AC_MSG_ERROR([cannot find required library iconv.])
547 ICONV_LIBS="$LIBICONV"
551 AC_SUBST(ICONV_INCLUDES)
553 AC_SUBST(ICONV_ICONV_H_IN)
557 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
559 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
560 AC_MSG_CHECKING([whether to use included zlib library])
561 AC_ARG_WITH(included-zlib,
562 [AS_HELP_STRING([--with-included-zlib], [use the zlib lib supplied with LyX instead of the system one])],
563 [lyx_cv_with_included_zlib=$withval],
564 [lyx_cv_with_included_zlib=no])
565 AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
566 AC_MSG_RESULT([$lyx_cv_with_included_zlib])
567 if test x$lyx_cv_with_included_zlib = xyes ; then
568 lyx_included_libs="$lyx_included_libs zlib"
569 ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
570 ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
571 mkdir -p 3rdparty/zlib
572 dnl include standard config.h for HAVE_UNISTD_H
573 echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
574 dnl prevent clash with system zlib that might be dragged in by other libs
575 echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
576 cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
579 AC_CHECK_HEADERS(zlib.h,
580 [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
581 [LYX_LIB_ERROR(zlib.h,zlib)])
583 AC_SUBST(ZLIB_INCLUDES)
588 dnl Usage: LYX_BUILD_INCLUDED_DTL : select if the included dtl should
589 dnl be built and installed.
590 AC_DEFUN([LYX_BUILD_INCLUDED_DTL],[
591 AC_MSG_CHECKING([whether to build dv2dt and dt2dv])
592 AC_ARG_WITH(included-dtl,
593 [AS_HELP_STRING([--with-included-dtl], [build and install the dv2dt and dt2dv programs supplied with LyX])],
594 [lyx_cv_with_included_dtl=$withval],
595 [lyx_cv_with_included_dtl=no])
596 AM_CONDITIONAL(BUILD_INCLUDED_DTL, test x$lyx_cv_with_included_dtl = xyes)
597 AC_MSG_RESULT([$lyx_cv_with_included_dtl])
598 if test x$lyx_cv_with_included_dtl = xyes ; then
599 lyx_flags="$lyx_flags build-dtl"
603 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
604 dnl necessary APIs are available to print callstacks.
605 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
606 [AC_ARG_ENABLE([callstack-printing],
607 [AS_HELP_STRING([--disable-callstack-printing],[do not print a callstack when crashing])],
608 lyx_cv_callstack_printing=$enableval, lyx_cv_callstack_printing=yes)
610 if test x"$lyx_cv_callstack_printing" = xyes; then
611 AC_CACHE_CHECK([whether printing callstack is possible],
612 [lyx_cv_callstack_printing],
613 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
614 #include <execinfo.h>
618 size_t size = backtrace(array, 200);
619 backtrace_symbols(array, size);
621 abi::__cxa_demangle("abcd", 0, 0, &status);
622 ]])],[],[lyx_cv_callstack_printing=no])])
624 if test x"$lyx_cv_callstack_printing" = xyes; then
625 AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
626 [Define if callstack can be printed])
627 lyx_flags="$lyx_flags callback-printing"
628 AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"
633 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
635 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
636 AC_ARG_WITH(included-mythes,
637 [AS_HELP_STRING([--with-included-mythes], [force to use the MyThes lib supplied with LyX])],
638 [use_included_mythes=$withval],
639 [use_included_mythes=no])
640 if test x$use_included_mythes != xyes ; then
642 use_included_mythes=yes
643 AC_CHECK_HEADERS([mythes.hxx mythes/mythes.hxx],
644 [mythes_h_location="<$ac_header>"
646 AC_MSG_CHECKING([checking for MyThes library])
647 for ac_lib in mythes mythes-1.2 ; do
648 LIBS="-l$ac_lib $save_LIBS"
650 [AC_LANG_PROGRAM([#include <cstdio>]
651 [#include $mythes_h_location], [MyThes dummy("idx","dat")])],
652 [MYTHES_LIBS=-l$ac_lib
653 AC_MSG_RESULT([$MYTHES_LIBS])
654 use_included_mythes=no])
656 if test $use_included_mythes != no ; then
657 AC_MSG_RESULT([not found])
662 if test $use_included_mythes = yes ; then
663 mythes_h_location="<mythes.hxx>"
664 MYTHES_INCLUDES='-I$(top_srcdir)/3rdparty/mythes/1.2.5/'
665 MYTHES_LIBS='$(top_builddir)/3rdparty/mythes/liblyxmythes.a'
666 lyx_included_libs="$lyx_included_libs mythes"
668 AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$use_included_mythes = xyes)
669 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$mythes_h_location,[Location of mythes.hxx])
670 AC_SUBST(MYTHES_INCLUDES)
671 AC_SUBST(MYTHES_LIBS)
672 AC_MSG_CHECKING([whether to use included MyThes library])
673 AC_MSG_RESULT([$use_included_mythes])
677 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
678 dnl [default-yes-value])
679 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
680 dnl resulting directory name in 'dir-var-name'.
681 AC_DEFUN([LYX_WITH_DIR],[
682 AC_ARG_WITH($1,[AS_HELP_STRING([--with-$1],[specify $2])])
683 AC_MSG_CHECKING([for $2])
684 if test -z "$with_$3"; then
685 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
687 test "x$with_$3" = xyes && with_$3=$5
690 AC_MSG_RESULT($lyx_cv_$3)
694 dnl Usage: LYX_LOOP_DIR(value,action)
695 dnl Executes action for values of variable `dir' in `values'. `values' can
696 dnl use ":" as a separator.
697 AC_DEFUN([LYX_LOOP_DIR],[
698 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
699 for dir in `eval "echo $1"`; do
700 if test ! "$dir" = NONE; then
701 test ! -d "$dir" && AC_MSG_ERROR(['$dir' is not a directory])
709 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
711 AC_DEFUN([LYX_ADD_LIB_DIR],[
713 if test "`(uname) 2>/dev/null`" = SunOS &&
714 uname -r | grep '^5' >/dev/null; then
715 if test $GXX = yes ; then
716 $1="${$1} -Wl[,]-R$2"
723 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
725 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
727 ### Check for a headers existence and location iff it exists
728 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
729 ## It almost works. I've tried a few variations but they give errors
730 ## of one sort or other: bad substitution or file not found etc. The
731 ## actual header _is_ found though and the cache variable is set however
732 ## the reported setting (on screen) is equal to $ac_safe for some unknown
734 ## Additionally, autoheader can't figure out what to use as the name in
735 ## the config.h.in file so we need to write our own entries there -- one for
736 ## each header in the form PATH_HEADER_NAME_H
738 AC_DEFUN([LYX_PATH_HEADER],
739 [ AC_CHECK_HEADER($1,[
740 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
741 ### the only remaining problem is getting the second parameter to this
742 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
743 ### of $ac_safe being printed.
744 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
745 [ cat > conftest.$ac_ext <<EOF
746 #line __oline__ "configure"
747 #include "confdefs.h"
751 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
752 grep $1 2>/dev/null | \
753 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
754 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
756 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
758 ### end of LYX_PATH_HEADER
760 ## Check what kind of packaging should be used at install time.
761 ## The default is autodetected.
762 AC_DEFUN([LYX_USE_PACKAGING],
763 [AC_MSG_CHECKING([what packaging should be used])
764 AC_ARG_WITH(packaging,
765 [AS_HELP_STRING([--with-packaging=STR], [set packaging for installation among:
766 posix, windows, macosx, haiku (default is autodetected)])],
767 [lyx_use_packaging="$withval"], [
769 *-apple-darwin*) lyx_use_packaging=macosx ;;
770 *-pc-mingw*) lyx_use_packaging=windows ;;
771 *-mingw32*) lyx_use_packaging=windows ;;
772 *haiku*) lyx_use_packaging=haiku ;;
773 *) lyx_use_packaging=posix ;;
775 AC_MSG_RESULT($lyx_use_packaging)
776 lyx_install_posix=false
777 lyx_install_macosx=false
778 lyx_install_cygwin=false
779 lyx_install_windows=false
780 case $lyx_use_packaging in
781 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
782 PACKAGE=LyX${version_suffix}
783 default_prefix="/Applications/${PACKAGE}.app"
784 AC_SUBST(osx_bundle_program_name,"${program_base_name}")
785 bindir='${prefix}/Contents/MacOS'
786 libdir='${prefix}/Contents/Resources'
787 datarootdir='${prefix}/Contents/Resources'
788 pkgdatadir='${datadir}'
789 mandir='${datadir}/man'
790 lyx_install_macosx=true ;;
791 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
792 PACKAGE=LyX${version_suffix}
793 default_prefix="C:/Program Files/${PACKAGE}"
794 bindir='${prefix}/bin'
795 libdir='${prefix}/Resources'
796 datarootdir='${prefix}/Resources'
797 pkgdatadir='${datadir}'
798 mandir='${prefix}/Resources/man'
799 lyx_install_windows=true ;;
800 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
801 PACKAGE=lyx${version_suffix}
802 program_suffix=$version_suffix
803 pkgdatadir='${datadir}/${PACKAGE}'
804 default_prefix=$ac_default_prefix
806 *cygwin*) lyx_install_cygwin=true ;;
807 *apple-darwin*) lyx_install_macosx=true ;;
809 lyx_install_posix=true ;;
810 haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
811 PACKAGE=lyx${version_suffix}
812 program_suffix=$version_suffix
813 pkgdatadir='${datadir}/${PACKAGE}'
814 default_prefix=$ac_default_prefix
815 lyx_install_posix=true ;;
816 *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
818 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
819 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
820 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
821 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
823 AC_SUBST(program_suffix)
827 ## ------------------------------------------------------------------------
828 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
829 ## one or two arguments.
831 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
832 ## ------------------------------------------------------------------------
834 AC_DEFUN([AC_FUNC_MKDIR],
835 [AC_CHECK_FUNCS([mkdir _mkdir])
836 AC_CACHE_CHECK([whether mkdir takes one argument],
837 [ac_cv_mkdir_takes_one_arg],
838 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
839 #include <sys/stat.h>
843 ]], [[mkdir (".");]])],[ac_cv_mkdir_takes_one_arg=yes],[ac_cv_mkdir_takes_one_arg=no])])
844 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
845 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
846 [Define if mkdir takes only one argument.])
851 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
852 dnl (which may be a relative path, and need not refer to any existing
855 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
856 dnl native Win32 path name, (but with slashes, not backslashes).
858 dnl On any other system, it is simply the result which would be obtained
859 dnl if PATHNAME represented an existing directory, and the pwd command was
860 dnl executed in that directory.
861 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
863 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
864 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
865 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
867 ac_dir=`AS_DIRNAME(["$ac_dir"])`
869 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
870 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
871 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
875 dnl this is used by the macro blow to general a proper config.h.in entry
876 m4_define([LYX_AH_CHECK_DECL],
877 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
878 [Define if you have the prototype for function `$1'])])dnl`
880 dnl Check things are declared in headers to avoid errors or warnings.
881 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
882 dnl Defines HAVE_DECL_{FUNCTION}
883 AC_DEFUN([LYX_CHECK_DECL],
884 [LYX_AH_CHECK_DECL($1)
887 AC_MSG_CHECKING([if $1 is declared by header $ac_header])
888 AC_EGREP_HEADER($1, $ac_header,
890 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
895 dnl this is used by the macro below to generate a proper config.h.in entry
896 m4_define([LYX_AH_CHECK_DEF],
897 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
898 [Define to 1 if `$1' is defined in `$2'])])dnl'
900 dnl Check whether name is defined in header by using it in codesnippet.
901 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
902 dnl Defines HAVE_DEF_{NAME}
903 AC_DEFUN([LYX_CHECK_DEF],
904 [LYX_AH_CHECK_DEF($1, $2)
905 AC_MSG_CHECKING([whether $1 is defined by header $2])
906 save_CPPFLAGS=$CPPFLAGS
907 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
908 save_CXXFLAGS=$CXXFLAGS
909 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
911 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$2>]], [[$3]])],[lyx_have_def_name=yes],[lyx_have_def_name=no])
913 CXXFLAGS=$save_CXXFLAGS
914 CPPFLAGS=$save_CPPFLAGS
915 AC_MSG_RESULT($lyx_have_def_name)
916 if test "x$lyx_have_def_name" = xyes; then
917 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
921 dnl Extract the single digits from PACKAGE_VERSION and make them available.
922 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
923 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
924 AC_DEFUN([LYX_SET_VERSION_INFO],
925 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
926 lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
927 lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
928 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
929 lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
930 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
931 test "x$lyx_patch" = "x" && lyx_patch=0
932 lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
933 lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
934 AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
935 AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
936 AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
937 AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
938 AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
939 AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
942 AC_DEFUN([LYX_CHECK_WITH_SAXON],
945 AC_ARG_WITH(saxon, AS_HELP_STRING([--without-saxon],[do not install saxon library (epub export)]))
946 test "$with_saxon" = "no" && lyx_use_saxon=false
948 if $lyx_use_saxon ; then
949 AC_MSG_RESULT(Set to installing internal saxon.)
952 AM_CONDITIONAL(SAXON_INSTALL, $lyx_use_saxon)
955 AC_DEFUN([LYX_CHECK_WITH_XSLT_SHEETS],
957 lyx_use_xslt_stylesheets=true
958 AC_ARG_WITH(xslt-stylesheets, AS_HELP_STRING([--without-xslt-stylesheets],[do not install XSLT Stylesheets (epub export)]))
959 test "$with_xslt_stylesheets" = "no" && lyx_use_xslt_stylesheets=false
961 if $lyx_use_xslt_stylesheets ; then
962 AC_MSG_RESULT(Set to installing XSLT Stylesheets.)
965 AM_CONDITIONAL(XSLT_SHEETS_INSTALL, $lyx_use_xslt_stylesheets)