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