]> git.lyx.org Git - features.git/blob - config/lyxinclude.m4
057caf491c371bb366a50cc80b93831628801127
[features.git] / config / lyxinclude.m4
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)
5
6
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
11
12 AC_MSG_CHECKING([for build type])
13 lyx_devel_version=no
14 lyx_prerelease=no
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]),
17   [case $enableval in
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]);;
24    esac],
25   [case AC_PACKAGE_VERSION in
26     *dev*) build_type=development;;
27     *pre*|*alpha*|*beta*|*rc*) build_type=prerelease;;
28     *) build_type=release ;;
29    esac])
30 AC_MSG_RESULT([$build_type])
31 lyx_flags="$lyx_flags build=$build_type"
32 case $build_type in
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 ;;
37 esac
38
39 AC_SUBST(lyx_devel_version)
40 ])
41
42
43 dnl Define the option to set a LyX version on installed executables and directories
44 dnl
45 dnl
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";
53    then
54      withval="-"AC_PACKAGE_VERSION
55      ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
56    fi
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])
62 ])
63
64
65 dnl Check whether to configure for Qt5. Default is Qt4.
66 dnl
67 AC_DEFUN([LYX_CHECK_QT5],[
68 AC_MSG_CHECKING([whether Qt5 is requested])
69 AC_ARG_ENABLE([qt5],
70   [  --enable-qt5            use Qt5 for building],
71   USE_QT5=$enableval, USE_QT5=no)
72 AC_MSG_RESULT([$USE_QT5])
73 AC_SUBST([USE_QT5])
74 ])
75
76
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
81 == $1
82 "
83 lyx_warning=yes])
84
85
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.])])
91
92
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
97 cat <<EOF
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)
101 $lyx_warning_txt
102
103 EOF
104 fi])
105
106
107 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
108 dnl
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
118         $1="$ac_prog"
119         break
120       fi
121     done
122     IFS="$ac_save_ifs"
123   fi
124
125   if test -n "[$]$1"; then
126     ac_result=yes
127   else
128     ac_result=no
129   fi
130   ifelse($3,,,[$3])
131   test -n "[$]$1" && break
132 done
133 ])dnl
134
135
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],
139                [lyx_cv_prog_clang],
140 [AC_TRY_COMPILE([], [
141 #ifndef __clang__
142             this is not clang
143 #endif
144 ],
145 [lyx_cv_prog_clang=yes ; CLANG=yes], [lyx_cv_prog_clang=no ; CLANG=no])])
146 ])
147
148
149 dnl Usage: LYX_CXX_CXX11: set lyx_use_cxx11 to yes if the compiler implements
150 dnl the C++11 standard.
151 AC_DEFUN([LYX_CXX_CXX11],
152 [AC_CACHE_CHECK([whether the compiler implements C++11],
153                [lyx_cv_cxx_cxx11],
154  [save_CXXFLAGS=$CXXFLAGS
155   CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
156   AC_LANG_PUSH(C++)
157   AC_TRY_COMPILE([], [
158 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
159             this is a c++11 compiler
160 #endif
161   ],
162   [lyx_cv_cxx_cxx11=no], [lyx_cv_cxx_cxx11=yes ; lyx_flags="$lyx_flags c++11"])
163  AC_LANG_POP(C++)
164  CXXFLAGS=$save_CXXFLAGS])
165 lyx_use_cxx11=$lyx_cv_cxx_cxx11
166 ])
167
168
169 dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
170 AC_DEFUN([LYX_LIB_STDCXX],
171 [AC_CACHE_CHECK([whether STL is libstdc++],
172                [lyx_cv_lib_stdcxx],
173 [AC_TRY_COMPILE([#include<vector>], [
174 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
175             this is not libstdc++
176 #endif
177 ],
178 [lyx_cv_lib_stdcxx=yes], [lyx_cv_lib_stdcxx=no])])
179 ])
180
181
182 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
183 dnl        if the STL library is GNU libstdc++ and the C++11 ABI is used.
184 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
185 [AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
186                [lyx_cv_lib_stdcxx_cxx11_abi],
187 [AC_TRY_COMPILE([#include<vector>], [
188 #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
189             this is not libstdc++ using the C++11 ABI
190 #endif
191 ],
192 [lyx_cv_lib_stdcxx_cxx11_abi=yes], [lyx_cv_lib_stdcxx_cxx11_abi=no])])
193 ])
194
195
196 AC_DEFUN([LYX_PROG_CXX],
197 [AC_REQUIRE([AC_PROG_CXX])
198 AC_REQUIRE([AC_PROG_CXXCPP])
199
200 AC_LANG_PUSH(C++)
201 LYX_PROG_CLANG
202 LYX_LIB_STDCXX
203 LYX_LIB_STDCXX_CXX11_ABI
204 AC_LANG_POP(C++)
205
206 if test $lyx_cv_lib_stdcxx = "yes" ; then
207   if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
208     AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
209   else
210     AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
211   fi
212 else
213   if test $lyx_cv_prog_clang = "yes" ; then
214     AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
215   fi
216 fi
217
218 ### We might want to get or shut warnings.
219 AC_ARG_ENABLE(warnings,
220   AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
221   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
222         enable_warnings=yes;
223     else
224         enable_warnings=no;
225     fi;])
226 if test x$enable_warnings = xyes ; then
227   lyx_flags="$lyx_flags warnings"
228 fi
229
230 ### We might want to disable debug
231 AC_ARG_ENABLE(debug,
232   AC_HELP_STRING([--enable-debug],[enable debug information]),,
233   [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
234 )
235
236 AC_ARG_ENABLE(stdlib-debug,
237   AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
238   [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes], 
239           [enable_stdlib_debug=no])]
240 )
241
242 AC_ARG_ENABLE(concept-checks,
243   AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
244   [AS_CASE([$build_type], [dev*|pre*], [enable_concept_checks=yes], 
245           [enable_concept_checks=no])]
246   if test x$USE_QT5 = xyes ; then
247       enable_concept_checks=no
248   fi
249 )
250
251 ### set up optimization
252 AC_ARG_ENABLE(optimization,
253     AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
254     enable_optimization=yes;)
255 case $enable_optimization in
256     yes)
257         if test $lyx_devel_version = yes ; then
258             lyx_optim=-O
259         else
260             lyx_optim=-O2
261         fi;;
262     no) lyx_optim=;;
263     *) lyx_optim=${enable_optimization};;
264 esac
265
266 AC_ARG_ENABLE(pch,
267   AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
268         enable_pch=no;)
269 lyx_pch_comp=no
270
271 AC_ARG_ENABLE(cxx11,
272   AC_HELP_STRING([--enable-cxx11],[enable C++11 mode (default: enabled for known good compilers)]),,
273   enable_cxx11=auto;)
274
275 AC_ARG_ENABLE(assertions,
276   AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
277   [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
278           [enable_assertions=no])]
279 )
280 if test "x$enable_assertions" = xyes ; then
281    lyx_flags="$lyx_flags assertions"
282    AC_DEFINE(ENABLE_ASSERTIONS,1,
283     [Define if you want assertions to be enabled in the code])
284 fi
285
286 # set the compiler options correctly.
287 lyx_std_regex=no
288 if test x$GXX = xyes; then
289   dnl clang++ pretends to be g++ 4.2.1; this is not useful
290   if test x$CLANG = xno; then
291     dnl Useful for global version info
292     gxx_version=`${CXX} -dumpversion`
293     CXX_VERSION="($gxx_version)"
294   else
295     gxx_version=clang
296   fi
297
298   AM_CXXFLAGS="$lyx_optim"
299   if test x$enable_debug = xyes ; then
300       AM_CXXFLAGS="-g $AM_CXXFLAGS"
301   fi
302   if test $build_type = gprof ; then
303     AM_CXXFLAGS="$AM_CXXFLAGS -pg"
304     AM_LDFLAGS="$AM_LDFLAGS -pg"
305   fi
306   if test $build_type = profiling ; then
307     AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
308   fi
309
310   if test x$USE_QT5 = xyes ; then
311       AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
312   fi
313   dnl Warnings are for preprocessor too
314   if test x$enable_warnings = xyes ; then
315       case $gxx_version in
316           4.0*|4.1*|4.2*|4.3*|4.4*|4.5*|4.6*|4.7*|4.8*|clang)
317               AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
318               ;;
319           *)
320               AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra -Wfloat-conversion"
321               ;;
322       esac
323   fi
324   case $gxx_version in
325       2.*|3.*) AC_ERROR([gcc 4.x is required]);;
326       *)  test $enable_pch = yes && lyx_pch_comp=yes ;;
327   esac
328   if test x$enable_stdlib_debug = xyes ; then
329     dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
330     dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
331     case $gxx_version in
332       *)
333         lyx_flags="$lyx_flags stdlib-debug"
334         AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
335         AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
336         ;;
337     esac
338   fi
339   if test x$enable_concept_checks = xyes ; then
340     case $gxx_version in
341       4.*)
342         lyx_flags="$lyx_flags concept-checks"
343         dnl FIXME check whether this makes sense with clang/libc++
344         AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
345         ;;
346     esac
347   fi
348   dnl enable_cxx11 can be yes/no/auto.
349   dnl By default, it is auto and we enable C++11 when possible
350   if test x$enable_cxx11 != xno ; then
351     case $gxx_version in
352       4.0*|4.1*|4.2*)
353          if x$enable_cxx11 = xyes; then
354             AC_ERROR([There is no C++11 support in gcc 4.2 or older])
355          fi;;
356       4.3*|4.4*|4.5*|4.6*)
357         dnl Note that this will define __GXX_EXPERIMENTAL_CXX0X__.
358         dnl The source code relies on that.
359         AM_CXXFLAGS="$AM_CXXFLAGS -std=c++0x";;
360       clang)
361         dnl presumably all clang version support c++11.
362         dnl the deprecated-register warning is very annoying with Qt4.x right now.
363         AM_CXXFLAGS="$AM_CXXFLAGS -std=c++11 -Wno-deprecated-register";;
364       *)
365         AM_CXXFLAGS="$AM_CXXFLAGS -std=c++11"
366         AS_CASE([$host], [*cygwin*], [AM_CXXFLAGS="$AM_CXXFLAGS -U__STRICT_ANSI__"]);;
367     esac
368   fi
369
370   LYX_CXX_CXX11
371   if test $lyx_use_cxx11 = yes ; then
372     if test x$CLANG = xno || test $lyx_cv_lib_stdcxx = yes; then
373       dnl <regex> in gcc is unusable in versions less than 4.9.0
374       dnl see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
375       case $gxx_version in
376         4.0*|4.1*|4.2*|4.3*|4.4*|4.5*|4.6*|4.7*|4.8*) ;;
377         *) lyx_std_regex=yes ;;
378       esac
379     else
380       lyx_std_regex=yes
381     fi
382
383     if test $lyx_std_regex = yes ; then
384       lyx_flags="$lyx_flags stdregex"
385       AC_DEFINE([LYX_USE_STD_REGEX], 1, [define to 1 if std::regex should be preferred to boost::regex])
386     fi
387   fi
388 fi
389 AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes)
390 test "$lyx_pch_comp" = yes && lyx_flags="$lyx_flags pch"
391 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
392 ])dnl
393
394 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
395 dnl        be used.
396 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
397         AC_MSG_CHECKING([whether to use included boost library])
398         AC_ARG_WITH(included-boost,
399             [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])],
400             [lyx_cv_with_included_boost=$withval],
401             [lyx_cv_with_included_boost=yes])
402         AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
403         AC_MSG_RESULT([$lyx_cv_with_included_boost])
404         if test x$lyx_cv_with_included_boost = xyes ; then
405             BOOST_INCLUDES='-I$(top_srcdir)/boost'
406             BOOST_LIBS='$(top_builddir)/boost/liblyxboost.a'
407         else
408             AC_LANG_PUSH(C++)
409             save_LIBS=$LIBS
410
411             AC_MSG_CHECKING([for multithreaded boost libraries])
412             LIBS="$save_LIBS -lboost_signals-mt $LIBTHREAD"
413             AC_LINK_IFELSE(
414                 [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
415                         [boost::signal<void ()> s;])],
416                 [AC_MSG_RESULT([yes])
417                  BOOST_MT="-mt"],
418                 [AC_MSG_RESULT([no])
419                  AC_MSG_CHECKING([for plain boost libraries])
420                  LIBS="$save_LIBS -lboost_signals"
421                  AC_LINK_IFELSE(
422                      [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
423                              [boost::signal<void ()> s;])],
424                      [AC_MSG_RESULT([yes])
425                       BOOST_MT=""],
426                      [AC_MSG_RESULT([no])
427                       AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
428                  ])
429             ])
430             LIBS=$save_LIBS
431             AC_LANG_POP(C++)
432             BOOST_INCLUDES=
433             if test $lyx_std_regex = yes ; then
434               BOOST_LIBS="-lboost_signals${BOOST_MT}"
435             else
436               BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}"
437             fi
438         fi
439         AC_SUBST(BOOST_INCLUDES)
440         AC_SUBST(BOOST_LIBS)
441 ])
442
443
444 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
445 dnl        necessary APIs are available to print callstacks.
446 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
447 [AC_CACHE_CHECK([whether printing callstack is possible],
448                [lyx_cv_callstack_printing],
449 [AC_TRY_COMPILE([
450 #include <execinfo.h>
451 #include <cxxabi.h>
452 ], [
453         void* array[200];
454         size_t size = backtrace(array, 200);
455         backtrace_symbols(array, size);
456         int status = 0;
457         abi::__cxa_demangle("abcd", 0, 0, &status);
458 ],
459 [lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])])
460 if test x"$lyx_cv_callstack_printing" = xyes; then
461   AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
462             [Define if callstack can be printed])
463 fi
464 ])
465
466
467 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
468 dnl        be used.
469 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
470         AC_MSG_CHECKING([whether to use included MyThes library])
471         AC_ARG_WITH(included-mythes,
472             [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])],
473             [lyx_cv_with_included_mythes=$withval],
474             [lyx_cv_with_included_mythes=yes])
475         AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$lyx_cv_with_included_mythes = xyes)
476         AC_MSG_RESULT([$lyx_cv_with_included_mythes])
477         if test x$lyx_cv_with_included_mythes != xyes ; then
478                 AC_LANG_PUSH(C++)
479                 AC_CHECK_HEADER(mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes.hxx>"])
480                 if test x$ac_cv_header_mythes_h != xyes; then
481                         AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
482                 fi
483                 AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no])
484                 if test x$lyx_mythes != xyes; then
485                         AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no])
486                 fi
487                 AC_LANG_POP(C++)
488                 if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
489                         AC_MSG_ERROR([cannot find suitable MyThes library (do not use --without-included-mythes)])
490                 fi
491                 AC_DEFINE(USE_EXTERNAL_MYTHES, 1, [Define as 1 to use an external MyThes library])
492                 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$lyx_cv_mythes_h_location,[Location of mythes.hxx])
493                 AC_SUBST(MYTHES_LIBS)
494         fi
495 ])
496
497
498 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
499 dnl                       [default-yes-value])
500 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
501 dnl  resulting directory name in 'dir-var-name'.
502 AC_DEFUN([LYX_WITH_DIR],[
503   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
504   AC_MSG_CHECKING([for $2])
505   if test -z "$with_$3"; then
506      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
507   else
508     test "x$with_$3" = xyes && with_$3=$5
509     lyx_cv_$3="$with_$3"
510   fi
511   AC_MSG_RESULT($lyx_cv_$3)])
512
513
514 dnl Usage: LYX_LOOP_DIR(value,action)
515 dnl Executes action for values of variable `dir' in `values'. `values' can
516 dnl use ":" as a separator.
517 AC_DEFUN([LYX_LOOP_DIR],[
518 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
519 for dir in `eval "echo $1"`; do
520   if test ! "$dir" = NONE; then
521     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
522     $2
523   fi
524 done
525 IFS=$ac_save_ifs
526 ])
527
528
529 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
530 dnl var-name.
531 AC_DEFUN([LYX_ADD_LIB_DIR],[
532 $1="${$1} -L$2"
533 if test "`(uname) 2>/dev/null`" = SunOS &&
534     uname -r | grep '^5' >/dev/null; then
535   if test $ac_cv_prog_gxx = yes ; then
536     $1="${$1} -Wl[,]-R$2"
537   else
538     $1="${$1} -R$2"
539   fi
540 fi])
541
542
543 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
544 dnl var-name.
545 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
546
547 ### Check for a headers existence and location iff it exists
548 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
549 ## It almost works.  I've tried a few variations but they give errors
550 ## of one sort or other: bad substitution or file not found etc.  The
551 ## actual header _is_ found though and the cache variable is set however
552 ## the reported setting (on screen) is equal to $ac_safe for some unknown
553 ## reason.
554 ## Additionally, autoheader can't figure out what to use as the name in
555 ## the config.h.in file so we need to write our own entries there -- one for
556 ## each header in the form PATH_HEADER_NAME_H
557 ##
558 AC_DEFUN([LYX_PATH_HEADER],
559 [ AC_CHECK_HEADER($1,[
560   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
561 ### the only remaining problem is getting the second parameter to this
562 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
563 ### of $ac_safe being printed.
564   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
565   [ cat > conftest.$ac_ext <<EOF
566 #line __oline__ "configure"
567 #include "confdefs.h"
568
569 #include <$1>
570 EOF
571 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
572   grep $1  2>/dev/null | \
573   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
574 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
575 rm -f conftest*])
576   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
577 ])
578 ### end of LYX_PATH_HEADER
579
580 ## Check what kind of packaging should be used at install time.
581 ## The default is autodetected.
582 AC_DEFUN([LYX_USE_PACKAGING],
583 [AC_MSG_CHECKING([what packaging should be used])
584 AC_ARG_WITH(packaging,
585   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
586                             Possible values: posix, windows, macosx, haiku])],
587   [lyx_use_packaging="$withval"], [
588   case $host in
589     *-apple-darwin*) lyx_use_packaging=macosx ;;
590     *-pc-mingw32*) lyx_use_packaging=windows ;;
591     *haiku*) lyx_use_packaging=haiku ;;
592     *) lyx_use_packaging=posix ;;
593   esac])
594 AC_MSG_RESULT($lyx_use_packaging)
595 lyx_install_posix=false
596 lyx_install_macosx=false
597 lyx_install_cygwin=false
598 lyx_install_windows=false
599 case $lyx_use_packaging in
600    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
601            PACKAGE=LyX${version_suffix}
602            default_prefix="/Applications/${PACKAGE}.app"
603            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
604            bindir='${prefix}/Contents/MacOS'
605            libdir='${prefix}/Contents/Resources'
606            datarootdir='${prefix}/Contents/Resources'
607            pkgdatadir='${datadir}'
608            mandir='${datadir}/man'
609            lyx_install_macosx=true ;;
610   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
611            PACKAGE=LyX${version_suffix}
612            default_prefix="C:/Program Files/${PACKAGE}"
613            bindir='${prefix}/bin'
614            libdir='${prefix}/Resources'
615            datarootdir='${prefix}/Resources'
616            pkgdatadir='${datadir}'
617            mandir='${prefix}/Resources/man'
618            lyx_install_windows=true ;;
619     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
620            PACKAGE=lyx${version_suffix}
621            program_suffix=$version_suffix
622            pkgdatadir='${datadir}/${PACKAGE}'
623            default_prefix=$ac_default_prefix
624            case ${host} in
625              *cygwin*) lyx_install_cygwin=true ;;
626              *apple-darwin*) lyx_install_macosx=true ;;
627            esac
628            lyx_install_posix=true ;;
629         haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
630            PACKAGE=lyx${version_suffix}
631            program_suffix=$version_suffix
632            pkgdatadir='${datadir}/${PACKAGE}'
633            default_prefix=$ac_default_prefix
634            lyx_install_posix=true ;;
635     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
636 esac
637 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
638 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
639 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
640 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
641 AC_SUBST(pkgdatadir)
642 AC_SUBST(program_suffix)
643 ])
644
645
646 ## ------------------------------------------------------------------------
647 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
648 ## one or two arguments.
649 ##
650 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
651 ## ------------------------------------------------------------------------
652 ##
653 AC_DEFUN([AC_FUNC_MKDIR],
654 [AC_CHECK_FUNCS([mkdir _mkdir])
655 AC_CACHE_CHECK([whether mkdir takes one argument],
656                [ac_cv_mkdir_takes_one_arg],
657 [AC_TRY_COMPILE([
658 #include <sys/stat.h>
659 #if HAVE_UNISTD_H
660 #  include <unistd.h>
661 #endif
662 ], [mkdir (".");],
663 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
664 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
665   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
666             [Define if mkdir takes only one argument.])
667 fi
668 ])
669
670
671 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
672 dnl (which may be a relative path, and need not refer to any existing
673 dnl entity).
674
675 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
676 dnl native Win32 path name, (but with slashes, not backslashes).
677
678 dnl On any other system, it is simply the result which would be obtained
679 dnl if PATHNAME represented an existing directory, and the pwd command was
680 dnl executed in that directory.
681 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
682 [ac_dir="$2"
683  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
684     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
685  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
686  do
687    ac_dir=`AS_DIRNAME(["$ac_dir"])`
688  done
689  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
690  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
691  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
692    s?/*$[]??'`
693 ])
694
695 dnl this is used by the macro blow to general a proper config.h.in entry
696 m4_define([LYX_AH_CHECK_DECL],
697 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
698   [Define if you have the prototype for function `$1'])])
699
700 dnl Check things are declared in headers to avoid errors or warnings.
701 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
702 dnl Defines HAVE_DECL_{FUNCTION}
703 AC_DEFUN([LYX_CHECK_DECL],
704 [LYX_AH_CHECK_DECL($1)
705 for ac_header in $2
706 do
707   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
708   AC_EGREP_HEADER($1, $ac_header,
709       [AC_MSG_RESULT(yes)
710        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
711        break],
712       [AC_MSG_RESULT(no)])
713 done])
714
715 dnl this is used by the macro below to generate a proper config.h.in entry
716 m4_define([LYX_AH_CHECK_DEF],
717 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
718   [Define to 1 if `$1' is defined in `$2'])])
719
720 dnl Check whether name is defined in header by using it in codesnippet.
721 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
722 dnl Defines HAVE_DEF_{NAME}
723 AC_DEFUN([LYX_CHECK_DEF],
724 [LYX_AH_CHECK_DEF($1, $2)
725  AC_MSG_CHECKING([whether $1 is defined by header $2])
726  AC_TRY_COMPILE([#include <$2>], [$3],
727      lyx_have_def_name=yes,
728      lyx_have_def_name=no)
729  AC_MSG_RESULT($lyx_have_def_name)
730  if test "x$lyx_have_def_name" = xyes; then
731    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
732  fi
733 ])
734
735 dnl Extract the single digits from PACKAGE_VERSION and make them available.
736 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
737 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
738 AC_DEFUN([LYX_SET_VERSION_INFO],
739 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
740  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
741  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
742  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
743  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
744  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
745  test "x$lyx_patch" = "x" && lyx_patch=0
746  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
747  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
748  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
749  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
750  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
751  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
752  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
753  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
754 ])
755
756 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
757 # ---------------------------------------------------------------------------
758 # Copied from autoconf 2.68, added a check that python version is < 3.0
759 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
760 # Run ACTION-IF-FALSE otherwise.
761 # This test uses sys.hexversion instead of the string equivalent (first
762 # word of sys.version), in order to cope with versions such as 2.2c1.
763 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
764 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
765  [prog="import sys
766 # split strings by '.' and convert to numeric.  Append some zeros
767 # because we need at least 4 digits for the hex conversion.
768 # map returns an iterator in Python 3.0 and a list in 2.x
769 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
770 minverhex = 0
771 maxverhex = 50331648 # = 3.0.0.0
772 # xrange is not present in Python 3.0 and range returns an iterator
773 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
774 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
775   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])