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)
7 dnl Usage LYX_CHECK_VERSION Displays version of LyX being built and
8 dnl sets variable "build_type"
9 AC_DEFUN([LYX_CHECK_VERSION],[
10 echo "configuring LyX version" AC_PACKAGE_VERSION
12 AC_MSG_CHECKING([for build type])
15 AC_ARG_ENABLE(build-type,
16 AC_HELP_STRING([--enable-build-type=TYPE],[set build setting according to TYPE=rel(ease), pre(release), dev(elopment), prof(iling), gprof]),
18 dev*) build_type=development;;
19 pre*) build_type=prerelease;;
20 prof*) build_type=profiling;;
21 gprof*) build_type=gprof;;
22 rel*) build_type=release;;
23 *) AC_MSG_ERROR([bad build type specification \"$enableval\". Please use one of rel(ease), pre(release), dev(elopment), prof(iling), or gprof]);;
25 [case AC_PACKAGE_VERSION in
26 *dev*) build_type=development;;
27 *pre*|*alpha*|*beta*|*rc*) build_type=prerelease;;
28 *) build_type=release ;;
30 AC_MSG_RESULT([$build_type])
31 lyx_flags="$lyx_flags build=$build_type"
33 development) lyx_devel_version=yes
34 AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
35 LYX_DATE="not released yet" ;;
36 prerelease) lyx_prerelease=yes ;;
39 AC_SUBST(lyx_devel_version)
43 dnl Define the option to set a LyX version on installed executables and directories
46 AC_DEFUN([LYX_VERSION_SUFFIX],[
47 AC_MSG_CHECKING([for version suffix])
48 dnl We need the literal double quotes in the rpm spec file
49 RPM_VERSION_SUFFIX='""'
50 AC_ARG_WITH(version-suffix,
51 [AC_HELP_STRING([--with-version-suffix@<:@=VERSION@:>@], install lyx files as lyxVERSION (VERSION=-AC_PACKAGE_VERSION))],
52 [if test "x$withval" = "xyes";
54 withval="-"AC_PACKAGE_VERSION
55 ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
57 AC_SUBST(version_suffix,$withval)
58 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
59 AC_SUBST(RPM_VERSION_SUFFIX)
60 AC_SUBST(program_base_name,"lyx")
61 AC_MSG_RESULT([$withval])
65 dnl Check whether to configure for Qt5. Default is Qt4.
67 AC_DEFUN([LYX_CHECK_QT5],[
68 AC_MSG_CHECKING([whether Qt5 is requested])
70 [ --enable-qt5 use Qt5 for building],
71 USE_QT5=$enableval, USE_QT5=no)
72 AC_MSG_RESULT([$USE_QT5])
77 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
78 dnl flag lyx_warning to yes.
79 AC_DEFUN([LYX_WARNING],[
80 lyx_warning_txt="$lyx_warning_txt
86 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
87 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
88 AC_DEFUN([LYX_LIB_ERROR],[
89 AC_MSG_ERROR([cannot find $1. Please check that the $2 library
90 is correctly installed on your system.])])
93 dnl Usage: LYX_CHECK_WARNINGS Displays a warning message if a LYX_WARNING
94 dnl has occurred previously.
95 AC_DEFUN([LYX_CHECK_WARNINGS],[
96 if test x$lyx_warning = xyes; then
98 === The following minor problems have been detected by configure.
99 === Please check the messages below before running 'make'.
100 === (see the section 'Problems' in the INSTALL file)
107 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
109 define(LYX_SEARCH_PROG,[dnl
110 for ac_prog in $2 ; do
111 # Extract the first word of "$ac_prog", so it can be a program name with args.
112 set dummy $ac_prog ; ac_word=$[2]
113 if test -z "[$]$1"; then
114 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
115 for ac_dir in $PATH; do
116 test -z "$ac_dir" && ac_dir=.
117 if test -f [$ac_dir/$ac_word]; then
125 if test -n "[$]$1"; then
131 test -n "[$]$1" && break
136 dnl Usage: LYX_PROG_CLANG: set CLANG to yes if the compiler is clang.
137 AC_DEFUN([LYX_PROG_CLANG],
138 [AC_CACHE_CHECK([whether the compiler is clang],
140 [AC_TRY_COMPILE([], [
145 [lyx_cv_prog_clang=yes ; CLANG=yes], [lyx_cv_prog_clang=no ; CLANG=no])])
146 if test $CLANG = yes ; then
147 AC_CACHE_CHECK([for clang version],
148 [lyx_cv_clang_version],
150 AC_COMPUTE_INT(clang_major,__clang_major__,,[clang_noversion_=yes])
151 AC_COMPUTE_INT(clang_minor,__clang_minor__,,[clang_noversion_=yes])
152 AC_COMPUTE_INT(clang_patchlevel,__clang_patchlevel__,,[clang_noversion_=yes])
153 if test $clang_noversion = yes ; then
154 clang_version=unknown
156 clang_version=$clang_major.$clang_minor.$clang_patchlevel
158 lyx_cv_clang_version=$clang_version])
163 dnl Usage: LYX_CXX_CXX11_FLAGS: add to AM_CXXFLAGS the best flag that
164 selects C++11 mode; gives an error when C++11 mode is not found.
165 AC_DEFUN([LYX_CXX_CXX11_FLAGS],
166 [AC_CACHE_CHECK([for at least C++11 mode], [lyx_cv_cxx11_flags],
167 [lyx_cv_cxx11_flags=none
168 for flag in -std=c++14 -std=c++11 "" -std=c++0x -std=gnu++14 -std=gnu++11 -std=gnu++0x ; do
169 save_CPPFLAGS=$CPPFLAGS
170 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
171 save_CXXFLAGS=$CXXFLAGS
172 CXXFLAGS="$flag $AM_CXXFLAGS $CXXFLAGS"
174 dnl sample openmp source code to test
176 template <typename T>
179 static_assert(sizeof(int) <= sizeof(T), "not big enough");
182 typedef check<check<bool>> right_angle_brackets;
187 TestDeleted() = delete;
194 typedef check<int> check_type;
196 check_type&& cr = static_cast<check_type&&>(c);
199 [lyx_cv_cxx11_flags=$flag; break])
201 CXXFLAGS=$save_CXXFLAGS
202 CPPFLAGS=$save_CPPFLAGS
204 if test $lyx_cv_cxx11_flags = none ; then
205 AC_ERROR([Cannot find suitable C++11 mode for compiler $CXX])
207 AM_CXXFLAGS="$lyx_cv_cxx11_flags $AM_CXXFLAGS"
211 dnl Usage: LYX_CXX_USE_REGEX
212 dnl decide whether we want to use std::regex and set the
213 dnl LYX_USE_STD_REGEX macro and conditional accordingly.
214 AC_DEFUN([LYX_CXX_USE_REGEX],
215 [AC_ARG_ENABLE(std-regex,
216 AC_HELP_STRING([--enable-std-regex],[use std::regex instead of boost::regex (default is autodetected)]),
217 [lyx_std_regex=$enableval],
218 [AC_MSG_CHECKING([for correct regex implementation])
219 save_CPPFLAGS=$CPPFLAGS
220 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
221 save_CXXFLAGS=$CXXFLAGS
222 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
224 # The following code snippet has been taken taken from example in
225 # http://stackoverflow.com/questions/8561850/compile-stdregex-iterator-with-gcc
233 typedef std::regex_iterator<const char *> Myiter;
235 const char *pat = "axayaz";
236 Myiter::regex_type rx("a");
237 Myiter next(pat, pat + strlen(pat), rx);
239 ], [lyx_std_regex=yes], [lyx_std_regex=no])
241 CXXFLAGS=$save_CXXFLAGS
242 CPPFLAGS=$save_CPPFLAGS
243 AC_MSG_RESULT([$lyx_std_regex])
246 if test $lyx_std_regex = yes ; then
247 lyx_flags="$lyx_flags std-regex"
248 AC_DEFINE([LYX_USE_STD_REGEX], 1, [define to 1 if std::regex should be preferred to boost::regex])
250 AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes)
254 dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
255 AC_DEFUN([LYX_LIB_STDCXX],
256 [AC_CACHE_CHECK([whether STL is libstdc++],
258 [AC_TRY_COMPILE([#include<vector>], [
259 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
260 this is not libstdc++
263 [lyx_cv_lib_stdcxx=yes], [lyx_cv_lib_stdcxx=no])])
267 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
268 dnl if the STL library is GNU libstdc++ and the C++11 ABI is used.
269 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
270 [AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
271 [lyx_cv_lib_stdcxx_cxx11_abi],
272 [AC_TRY_COMPILE([#include<vector>], [
273 #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
274 this is not libstdc++ using the C++11 ABI
277 [lyx_cv_lib_stdcxx_cxx11_abi=yes], [lyx_cv_lib_stdcxx_cxx11_abi=no])])
281 AC_DEFUN([LYX_PROG_CXX],
282 [AC_REQUIRE([AC_PROG_CXX])
283 AC_REQUIRE([AC_PROG_CXXCPP])
288 LYX_LIB_STDCXX_CXX11_ABI
291 if test $lyx_cv_lib_stdcxx = "yes" ; then
292 if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
293 AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
295 AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
298 if test $lyx_cv_prog_clang = "yes" ; then
299 AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
303 ### We might want to get or shut warnings.
304 AC_ARG_ENABLE(warnings,
305 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
306 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
311 if test x$enable_warnings = xyes ; then
312 lyx_flags="$lyx_flags warnings"
315 ### We might want to disable debug
317 AC_HELP_STRING([--enable-debug],[enable debug information]),,
318 [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
321 AC_ARG_ENABLE(stdlib-debug,
322 AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
323 [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes],
324 [enable_stdlib_debug=no])]
327 ### set up optimization
328 AC_ARG_ENABLE(optimization,
329 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
330 enable_optimization=yes;)
331 case $enable_optimization in
333 if test $lyx_devel_version = yes ; then
339 *) lyx_optim=${enable_optimization};;
342 AC_ARG_ENABLE(assertions,
343 AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
344 [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
345 [enable_assertions=no])]
347 if test "x$enable_assertions" = xyes ; then
348 lyx_flags="$lyx_flags assertions"
349 AC_DEFINE(ENABLE_ASSERTIONS,1,
350 [Define if you want assertions to be enabled in the code])
353 # set the compiler options correctly.
354 if test x$GXX = xyes; then
355 dnl clang++ pretends to be g++ 4.2.1; this is not useful
356 if test x$CLANG = xno; then
357 dnl Useful for global version info
358 gxx_version=`${CXX} -dumpversion`
359 CXX_VERSION="($gxx_version)"
361 gxx_version=clang-$clang_version
362 CXX_VERSION="($clang_version)"
365 AM_CXXFLAGS="$lyx_optim"
366 if test x$enable_debug = xyes ; then
367 AM_CXXFLAGS="-g $AM_CXXFLAGS"
369 if test $build_type = gprof ; then
370 AM_CXXFLAGS="$AM_CXXFLAGS -pg"
371 AM_LDFLAGS="$AM_LDFLAGS -pg"
373 if test $build_type = profiling ; then
374 AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
377 if test x$USE_QT5 = xyes ; then
378 AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
380 dnl Warnings are for preprocessor too
381 if test x$enable_warnings = xyes ; then
382 AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
385 2.*|3.*) AC_ERROR([gcc >= 4.6 is required]);;
386 4.0*|4.1*|4.2*|4.3*|4.4*|4.5*) AC_ERROR([gcc >= 4.6 is required]);;
388 if test x$enable_stdlib_debug = xyes ; then
389 dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
390 dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
393 lyx_flags="$lyx_flags stdlib-debug"
394 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
395 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
403 # Some additional flags may be needed
404 if test x$GXX = xyes; then
406 clang-3.0*|clang-3.1*|clang-3.2*|clang-3.3*)
407 dnl boost contains pragmas that are annoying on older clang versions
408 AM_CPPFLAGS="-Wno-unknown-pragmas $AM_CPPFLAGS";;
410 dnl the more recent versions support the deprecated-register warning,
411 dnl which is very annoying with Qt4.x right now.
412 AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-register";;
419 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
421 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
422 AC_MSG_CHECKING([whether to use included boost library])
423 AC_ARG_WITH(included-boost,
424 [AC_HELP_STRING([--without-included-boost], [do not use the boost lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
425 [lyx_cv_with_included_boost=$withval],
426 [lyx_cv_with_included_boost=yes])
427 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
428 AC_MSG_RESULT([$lyx_cv_with_included_boost])
429 if test x$lyx_cv_with_included_boost = xyes ; then
430 BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
431 if test $lyx_std_regex = yes ; then
434 BOOST_LIBS='$(top_builddir)/3rdparty/boost/liblyxboost.a'
438 if test $lyx_std_regex = yes ; then
444 AC_MSG_CHECKING([for multithreaded boost libraries])
445 LIBS="$save_LIBS -lboost_regex-mt $LIBTHREAD"
447 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
448 [boost::regex reg;])],
449 [AC_MSG_RESULT([yes])
452 AC_MSG_CHECKING([for plain boost libraries])
453 LIBS="$save_LIBS -lboost_regex"
455 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
456 [boost::regex reg;])],
457 [AC_MSG_RESULT([yes])
460 AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
466 dnl In general, system boost libraries are incompatible with
467 dnl the use of stdlib-debug in libstdc++. See ticket #9736 for
469 if test $enable_stdlib_debug = "yes" ; then
470 LYX_WARNING([Compiling LyX with stdlib-debug and system boost libraries may lead to
471 crashes. Consider using --disable-stdlib-debug or removing
472 --without-included-boost.])
475 BOOST_LIBS="-lboost_regex${BOOST_MT}"
478 AC_SUBST(BOOST_INCLUDES)
483 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
485 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
486 AC_MSG_CHECKING([whether to use included iconv library])
487 AC_ARG_WITH(included-iconv,
488 [AC_HELP_STRING([--without-included-iconv], [do not use the iconv lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
489 [lyx_cv_with_included_iconv=$withval],
490 [lyx_cv_with_included_iconv=no])
491 AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
492 AC_MSG_RESULT([$lyx_cv_with_included_iconv])
493 if test x$lyx_cv_with_included_iconv = xyes ; then
494 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
497 AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
498 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.14/lib/loop_wchar.h.
499 if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
504 AC_SUBST([USE_MBSTATE_T])
505 AC_CACHE_CHECK([whether <wchar.h> is standalone],
506 [gl_cv_header_wchar_h_standalone],
512 [gl_cv_header_wchar_h_standalone=yes],
513 [gl_cv_header_wchar_h_standalone=no])])
514 if test $gl_cv_header_wchar_h_standalone = yes; then
519 AC_SUBST([BROKEN_WCHAR_H])
520 dnl we want const correctness
521 AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
522 [Define as const if the declaration of iconv() needs const.])
524 AC_SUBST([ICONV_CONST])
525 dnl we build a static lib
527 AC_SUBST([DLL_VARIABLE])
528 ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.14 -I$(top_builddir)/3rdparty/libiconv'
529 ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
530 ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.14/include/iconv.h.in
534 if test "$am_cv_func_iconv" = no; then
535 AC_MSG_ERROR([cannot find required library iconv.])
537 ICONV_LIBS="$LIBICONV"
541 AC_SUBST(ICONV_INCLUDES)
543 AC_SUBST(ICONV_ICONV_H_IN)
547 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
549 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
550 AC_MSG_CHECKING([whether to use included zlib library])
551 AC_ARG_WITH(included-zlib,
552 [AC_HELP_STRING([--without-included-zlib], [do not use the zlib lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
553 [lyx_cv_with_included_zlib=$withval],
554 [lyx_cv_with_included_zlib=no])
555 AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
556 AC_MSG_RESULT([$lyx_cv_with_included_zlib])
557 if test x$lyx_cv_with_included_zlib = xyes ; then
558 ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
559 ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
560 mkdir -p 3rdparty/zlib
561 dnl include standard config.h for HAVE_UNISTD_H
562 echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
563 dnl prevent clash with system zlib that might be dragged in by other libs
564 echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
565 cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
568 AC_CHECK_HEADERS(zlib.h,
569 [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
570 [LYX_LIB_ERROR(zlib.h,zlib)])
572 AC_SUBST(ZLIB_INCLUDES)
577 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
578 dnl necessary APIs are available to print callstacks.
579 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
580 [AC_CACHE_CHECK([whether printing callstack is possible],
581 [lyx_cv_callstack_printing],
583 #include <execinfo.h>
587 size_t size = backtrace(array, 200);
588 backtrace_symbols(array, size);
590 abi::__cxa_demangle("abcd", 0, 0, &status);
592 [lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])])
593 if test x"$lyx_cv_callstack_printing" = xyes; then
594 AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
595 [Define if callstack can be printed])
600 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
602 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
603 AC_MSG_CHECKING([whether to use included MyThes library])
604 AC_ARG_WITH(included-mythes,
605 [AC_HELP_STRING([--without-included-mythes], [do not use the MyThes lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
606 [lyx_cv_with_included_mythes=$withval],
607 [lyx_cv_with_included_mythes=yes])
608 AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$lyx_cv_with_included_mythes = xyes)
609 AC_MSG_RESULT([$lyx_cv_with_included_mythes])
610 if test x$lyx_cv_with_included_mythes != xyes ; then
612 AC_CHECK_HEADER(mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes.hxx>"])
613 if test x$ac_cv_header_mythes_h != xyes; then
614 AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
616 AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no])
617 if test x$lyx_mythes != xyes; then
618 AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no])
621 if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
622 AC_MSG_ERROR([cannot find suitable MyThes library (do not use --without-included-mythes)])
624 AC_DEFINE(USE_EXTERNAL_MYTHES, 1, [Define as 1 to use an external MyThes library])
625 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$lyx_cv_mythes_h_location,[Location of mythes.hxx])
626 AC_SUBST(MYTHES_LIBS)
631 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
632 dnl [default-yes-value])
633 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
634 dnl resulting directory name in 'dir-var-name'.
635 AC_DEFUN([LYX_WITH_DIR],[
636 AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
637 AC_MSG_CHECKING([for $2])
638 if test -z "$with_$3"; then
639 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
641 test "x$with_$3" = xyes && with_$3=$5
644 AC_MSG_RESULT($lyx_cv_$3)])
647 dnl Usage: LYX_LOOP_DIR(value,action)
648 dnl Executes action for values of variable `dir' in `values'. `values' can
649 dnl use ":" as a separator.
650 AC_DEFUN([LYX_LOOP_DIR],[
651 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
652 for dir in `eval "echo $1"`; do
653 if test ! "$dir" = NONE; then
654 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
662 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
664 AC_DEFUN([LYX_ADD_LIB_DIR],[
666 if test "`(uname) 2>/dev/null`" = SunOS &&
667 uname -r | grep '^5' >/dev/null; then
668 if test $ac_cv_prog_gxx = yes ; then
669 $1="${$1} -Wl[,]-R$2"
676 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
678 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
680 ### Check for a headers existence and location iff it exists
681 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
682 ## It almost works. I've tried a few variations but they give errors
683 ## of one sort or other: bad substitution or file not found etc. The
684 ## actual header _is_ found though and the cache variable is set however
685 ## the reported setting (on screen) is equal to $ac_safe for some unknown
687 ## Additionally, autoheader can't figure out what to use as the name in
688 ## the config.h.in file so we need to write our own entries there -- one for
689 ## each header in the form PATH_HEADER_NAME_H
691 AC_DEFUN([LYX_PATH_HEADER],
692 [ AC_CHECK_HEADER($1,[
693 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
694 ### the only remaining problem is getting the second parameter to this
695 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
696 ### of $ac_safe being printed.
697 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
698 [ cat > conftest.$ac_ext <<EOF
699 #line __oline__ "configure"
700 #include "confdefs.h"
704 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
705 grep $1 2>/dev/null | \
706 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
707 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
709 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
711 ### end of LYX_PATH_HEADER
713 ## Check what kind of packaging should be used at install time.
714 ## The default is autodetected.
715 AC_DEFUN([LYX_USE_PACKAGING],
716 [AC_MSG_CHECKING([what packaging should be used])
717 AC_ARG_WITH(packaging,
718 [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
719 Possible values: posix, windows, macosx, haiku])],
720 [lyx_use_packaging="$withval"], [
722 *-apple-darwin*) lyx_use_packaging=macosx ;;
723 *-pc-mingw*) lyx_use_packaging=windows ;;
724 *-mingw32*) lyx_use_packaging=windows ;;
725 *haiku*) lyx_use_packaging=haiku ;;
726 *) lyx_use_packaging=posix ;;
728 AC_MSG_RESULT($lyx_use_packaging)
729 lyx_install_posix=false
730 lyx_install_macosx=false
731 lyx_install_cygwin=false
732 lyx_install_windows=false
733 case $lyx_use_packaging in
734 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
735 PACKAGE=LyX${version_suffix}
736 default_prefix="/Applications/${PACKAGE}.app"
737 AC_SUBST(osx_bundle_program_name,"${program_base_name}")
738 bindir='${prefix}/Contents/MacOS'
739 libdir='${prefix}/Contents/Resources'
740 datarootdir='${prefix}/Contents/Resources'
741 pkgdatadir='${datadir}'
742 mandir='${datadir}/man'
743 lyx_install_macosx=true ;;
744 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
745 PACKAGE=LyX${version_suffix}
746 default_prefix="C:/Program Files/${PACKAGE}"
747 bindir='${prefix}/bin'
748 libdir='${prefix}/Resources'
749 datarootdir='${prefix}/Resources'
750 pkgdatadir='${datadir}'
751 mandir='${prefix}/Resources/man'
752 lyx_install_windows=true ;;
753 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
754 PACKAGE=lyx${version_suffix}
755 program_suffix=$version_suffix
756 pkgdatadir='${datadir}/${PACKAGE}'
757 default_prefix=$ac_default_prefix
759 *cygwin*) lyx_install_cygwin=true ;;
760 *apple-darwin*) lyx_install_macosx=true ;;
762 lyx_install_posix=true ;;
763 haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
764 PACKAGE=lyx${version_suffix}
765 program_suffix=$version_suffix
766 pkgdatadir='${datadir}/${PACKAGE}'
767 default_prefix=$ac_default_prefix
768 lyx_install_posix=true ;;
769 *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
771 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
772 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
773 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
774 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
776 AC_SUBST(program_suffix)
780 ## ------------------------------------------------------------------------
781 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
782 ## one or two arguments.
784 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
785 ## ------------------------------------------------------------------------
787 AC_DEFUN([AC_FUNC_MKDIR],
788 [AC_CHECK_FUNCS([mkdir _mkdir])
789 AC_CACHE_CHECK([whether mkdir takes one argument],
790 [ac_cv_mkdir_takes_one_arg],
792 #include <sys/stat.h>
797 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
798 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
799 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
800 [Define if mkdir takes only one argument.])
805 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
806 dnl (which may be a relative path, and need not refer to any existing
809 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
810 dnl native Win32 path name, (but with slashes, not backslashes).
812 dnl On any other system, it is simply the result which would be obtained
813 dnl if PATHNAME represented an existing directory, and the pwd command was
814 dnl executed in that directory.
815 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
817 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
818 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
819 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
821 ac_dir=`AS_DIRNAME(["$ac_dir"])`
823 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
824 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
825 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
829 dnl this is used by the macro blow to general a proper config.h.in entry
830 m4_define([LYX_AH_CHECK_DECL],
831 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
832 [Define if you have the prototype for function `$1'])])
834 dnl Check things are declared in headers to avoid errors or warnings.
835 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
836 dnl Defines HAVE_DECL_{FUNCTION}
837 AC_DEFUN([LYX_CHECK_DECL],
838 [LYX_AH_CHECK_DECL($1)
841 AC_MSG_CHECKING([if $1 is declared by header $ac_header])
842 AC_EGREP_HEADER($1, $ac_header,
844 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
849 dnl this is used by the macro below to generate a proper config.h.in entry
850 m4_define([LYX_AH_CHECK_DEF],
851 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
852 [Define to 1 if `$1' is defined in `$2'])])
854 dnl Check whether name is defined in header by using it in codesnippet.
855 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
856 dnl Defines HAVE_DEF_{NAME}
857 AC_DEFUN([LYX_CHECK_DEF],
858 [LYX_AH_CHECK_DEF($1, $2)
859 AC_MSG_CHECKING([whether $1 is defined by header $2])
860 save_CPPFLAGS=$CPPFLAGS
861 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
862 save_CXXFLAGS=$CXXFLAGS
863 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
865 AC_TRY_COMPILE([#include <$2>], [$3],
866 lyx_have_def_name=yes,
867 lyx_have_def_name=no)
869 CXXFLAGS=$save_CXXFLAGS
870 CPPFLAGS=$save_CPPFLAGS
871 AC_MSG_RESULT($lyx_have_def_name)
872 if test "x$lyx_have_def_name" = xyes; then
873 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
877 dnl Extract the single digits from PACKAGE_VERSION and make them available.
878 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
879 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
880 AC_DEFUN([LYX_SET_VERSION_INFO],
881 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
882 lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
883 lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
884 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
885 lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
886 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
887 test "x$lyx_patch" = "x" && lyx_patch=0
888 lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
889 lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
890 AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
891 AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
892 AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
893 AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
894 AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
895 AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
898 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
899 # ---------------------------------------------------------------------------
900 # Copied from autoconf 2.68, added a check that python version is < 3.0
901 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
902 # Run ACTION-IF-FALSE otherwise.
903 # This test uses sys.hexversion instead of the string equivalent (first
904 # word of sys.version), in order to cope with versions such as 2.2c1.
905 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
906 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
908 # split strings by '.' and convert to numeric. Append some zeros
909 # because we need at least 4 digits for the hex conversion.
910 # map returns an iterator in Python 3.0 and a list in 2.x
911 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
913 maxverhex = 50331648 # = 3.0.0.0
914 # xrange is not present in Python 3.0 and range returns an iterator
915 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
916 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
917 AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])