]> git.lyx.org Git - features.git/blob - config/lyxinclude.m4
f8f01c0a7d0fecfaa277943731398160d55abfd2
[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 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*)
358               lyx_flags="$lyx_flags c++11-mode"
359               CXXFLAGS="-std=gnu++11 $CXXFLAGS"
360               ;;
361       esac
362   fi
363 fi
364 test "$lyx_pch_comp" = yes && lyx_flags="$lyx_flags pch"
365 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
366 ])dnl
367
368 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
369 dnl        be used.
370 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
371         AC_MSG_CHECKING([whether to use included boost library])
372         AC_ARG_WITH(included-boost,
373             [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])],
374             [lyx_cv_with_included_boost=$withval],
375             [lyx_cv_with_included_boost=yes])
376         AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
377         AC_MSG_RESULT([$lyx_cv_with_included_boost])
378         if test x$lyx_cv_with_included_boost = xyes ; then
379             BOOST_INCLUDES='-I$(top_srcdir)/boost'
380             BOOST_LIBS='$(top_builddir)/boost/liblyxboost.a'
381         else
382             AC_LANG_PUSH(C++)
383             save_LIBS=$LIBS
384
385             AC_MSG_CHECKING([for multithreaded boost libraries])
386             LIBS="$save_LIBS -lboost_signals-mt -lm $LIBTHREAD"
387             AC_LINK_IFELSE(
388                 [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
389                         [boost::signal<void ()> s;])],
390                 [AC_MSG_RESULT([yes])
391                  BOOST_MT="-mt"],
392                 [AC_MSG_RESULT([no])
393                  AC_MSG_CHECKING([for plain boost libraries])
394                  LIBS="$save_LIBS -lboost_signals -lm"
395                  AC_LINK_IFELSE(
396                      [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
397                              [boost::signal<void ()> s;])],
398                      [AC_MSG_RESULT([yes])
399                       BOOST_MT=""],
400                      [AC_MSG_RESULT([no])
401                       AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
402                  ])
403             ])
404             LIBS=$save_LIBS
405             AC_LANG_POP(C++)
406             BOOST_INCLUDES=
407             BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}"
408         fi
409         AC_SUBST(BOOST_INCLUDES)
410         AC_SUBST(BOOST_LIBS)
411 ])
412
413
414 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
415 dnl        necessary APIs are available to print callstacks.
416 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
417 [AC_CACHE_CHECK([whether printing callstack is possible],
418                [lyx_cv_callstack_printing],
419 [AC_TRY_COMPILE([
420 #include <execinfo.h>
421 #include <cxxabi.h>
422 ], [
423         void* array[200];
424         size_t size = backtrace(array, 200);
425         backtrace_symbols(array, size);
426         int status = 0;
427         abi::__cxa_demangle("abcd", 0, 0, &status);
428 ],
429 [lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])])
430 if test x"$lyx_cv_callstack_printing" = xyes; then
431   AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
432             [Define if callstack can be printed])
433 fi
434 ])
435
436
437 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
438 dnl        be used.
439 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
440         AC_MSG_CHECKING([whether to use included MyThes library])
441         AC_ARG_WITH(included-mythes,
442             [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])],
443             [lyx_cv_with_included_mythes=$withval],
444             [lyx_cv_with_included_mythes=yes])
445         AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$lyx_cv_with_included_mythes = xyes)
446         AC_MSG_RESULT([$lyx_cv_with_included_mythes])
447         if test x$lyx_cv_with_included_mythes != xyes ; then
448                 AC_LANG_PUSH(C++)
449                 AC_CHECK_HEADER(mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes.hxx>"])
450                 if test x$ac_cv_header_mythes_h != xyes; then
451                         AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
452                 fi
453                 AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no], [-lm])
454                 if test x$lyx_mythes != xyes; then
455                         AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no], [-lm])
456                 fi
457                 AC_LANG_POP(C++)
458                 if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
459                         AC_MSG_ERROR([cannot find suitable MyThes library (do not use --without-included-mythes)])
460                 fi
461                 AC_DEFINE(USE_EXTERNAL_MYTHES, 1, [Define as 1 to use an external MyThes library])
462                 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$lyx_cv_mythes_h_location,[Location of mythes.hxx])
463                 AC_SUBST(MYTHES_LIBS)
464         fi
465 ])
466
467
468 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
469 dnl                       [default-yes-value])
470 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
471 dnl  resulting directory name in 'dir-var-name'.
472 AC_DEFUN([LYX_WITH_DIR],[
473   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
474   AC_MSG_CHECKING([for $2])
475   if test -z "$with_$3"; then
476      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
477   else
478     test "x$with_$3" = xyes && with_$3=$5
479     lyx_cv_$3="$with_$3"
480   fi
481   AC_MSG_RESULT($lyx_cv_$3)])
482
483
484 dnl Usage: LYX_LOOP_DIR(value,action)
485 dnl Executes action for values of variable `dir' in `values'. `values' can
486 dnl use ":" as a separator.
487 AC_DEFUN([LYX_LOOP_DIR],[
488 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
489 for dir in `eval "echo $1"`; do
490   if test ! "$dir" = NONE; then
491     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
492     $2
493   fi
494 done
495 IFS=$ac_save_ifs
496 ])
497
498
499 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
500 dnl var-name.
501 AC_DEFUN([LYX_ADD_LIB_DIR],[
502 $1="${$1} -L$2"
503 if test "`(uname) 2>/dev/null`" = SunOS &&
504     uname -r | grep '^5' >/dev/null; then
505   if test $ac_cv_prog_gxx = yes ; then
506     $1="${$1} -Wl[,]-R$2"
507   else
508     $1="${$1} -R$2"
509   fi
510 fi])
511
512
513 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
514 dnl var-name.
515 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
516
517 ### Check for a headers existence and location iff it exists
518 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
519 ## It almost works.  I've tried a few variations but they give errors
520 ## of one sort or other: bad substitution or file not found etc.  The
521 ## actual header _is_ found though and the cache variable is set however
522 ## the reported setting (on screen) is equal to $ac_safe for some unknown
523 ## reason.
524 ## Additionally, autoheader can't figure out what to use as the name in
525 ## the config.h.in file so we need to write our own entries there -- one for
526 ## each header in the form PATH_HEADER_NAME_H
527 ##
528 AC_DEFUN([LYX_PATH_HEADER],
529 [ AC_CHECK_HEADER($1,[
530   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
531 ### the only remaining problem is getting the second parameter to this
532 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
533 ### of $ac_safe being printed.
534   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
535   [ cat > conftest.$ac_ext <<EOF
536 #line __oline__ "configure"
537 #include "confdefs.h"
538
539 #include <$1>
540 EOF
541 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
542   grep $1  2>/dev/null | \
543   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
544 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
545 rm -f conftest*])
546   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
547 ])
548 ### end of LYX_PATH_HEADER
549
550 ## Check what kind of packaging should be used at install time.
551 ## The default is autodetected.
552 AC_DEFUN([LYX_USE_PACKAGING],
553 [AC_MSG_CHECKING([what packaging should be used])
554 AC_ARG_WITH(packaging,
555   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
556                             Possible values: posix, windows, macosx])],
557   [lyx_use_packaging="$withval"], [
558   case $host in
559     *-apple-darwin*) lyx_use_packaging=macosx ;;
560      *-pc-mingw32*) lyx_use_packaging=windows;;
561                   *) lyx_use_packaging=posix;;
562   esac])
563 AC_MSG_RESULT($lyx_use_packaging)
564 lyx_install_posix=false
565 lyx_install_macosx=false
566 lyx_install_cygwin=false
567 lyx_install_windows=false
568 case $lyx_use_packaging in
569    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
570            PACKAGE=LyX${version_suffix}
571            default_prefix="/Applications/${PACKAGE}.app"
572            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
573            bindir='${prefix}/Contents/MacOS'
574            libdir='${prefix}/Contents/Resources'
575            datarootdir='${prefix}/Contents/Resources'
576            pkgdatadir='${datadir}'
577            mandir='${datadir}/man'
578            lyx_install_macosx=true ;;
579   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
580            PACKAGE=LyX${version_suffix}
581            default_prefix="C:/Program Files/${PACKAGE}"
582            bindir='${prefix}/bin'
583            libdir='${prefix}/Resources'
584            datarootdir='${prefix}/Resources'
585            pkgdatadir='${datadir}'
586            mandir='${prefix}/Resources/man'
587            lyx_install_windows=true ;;
588     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
589            PACKAGE=lyx${version_suffix}
590            program_suffix=$version_suffix
591            pkgdatadir='${datadir}/${PACKAGE}'
592            default_prefix=$ac_default_prefix
593            case ${host} in
594            *cygwin*) lyx_install_cygwin=true ;;
595                 *apple-darwin*) lyx_install_macosx=true ;;
596            esac
597            lyx_install_posix=true ;;
598     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
599 esac
600 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
601 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
602 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
603 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
604 AC_SUBST(pkgdatadir)
605 AC_SUBST(program_suffix)
606 ])
607
608
609 ## ------------------------------------------------------------------------
610 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
611 ## one or two arguments.
612 ##
613 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
614 ## ------------------------------------------------------------------------
615 ##
616 AC_DEFUN([AC_FUNC_MKDIR],
617 [AC_CHECK_FUNCS([mkdir _mkdir])
618 AC_CACHE_CHECK([whether mkdir takes one argument],
619                [ac_cv_mkdir_takes_one_arg],
620 [AC_TRY_COMPILE([
621 #include <sys/stat.h>
622 #if HAVE_UNISTD_H
623 #  include <unistd.h>
624 #endif
625 ], [mkdir (".");],
626 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
627 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
628   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
629             [Define if mkdir takes only one argument.])
630 fi
631 ])
632
633
634 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
635 dnl (which may be a relative path, and need not refer to any existing
636 dnl entity).
637
638 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
639 dnl native Win32 path name, (but with slashes, not backslashes).
640
641 dnl On any other system, it is simply the result which would be obtained
642 dnl if PATHNAME represented an existing directory, and the pwd command was
643 dnl executed in that directory.
644 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
645 [ac_dir="$2"
646  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
647     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
648  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
649  do
650    ac_dir=`AS_DIRNAME(["$ac_dir"])`
651  done
652  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
653  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
654  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
655    s?/*$[]??'`
656 ])
657
658 dnl this is used by the macro blow to general a proper config.h.in entry
659 m4_define([LYX_AH_CHECK_DECL],
660 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
661   [Define if you have the prototype for function `$1'])])
662
663 dnl Check things are declared in headers to avoid errors or warnings.
664 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
665 dnl Defines HAVE_DECL_{FUNCTION}
666 AC_DEFUN([LYX_CHECK_DECL],
667 [LYX_AH_CHECK_DECL($1)
668 for ac_header in $2
669 do
670   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
671   AC_EGREP_HEADER($1, $ac_header,
672       [AC_MSG_RESULT(yes)
673        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
674        break],
675       [AC_MSG_RESULT(no)])
676 done])
677
678 dnl this is used by the macro below to generate a proper config.h.in entry
679 m4_define([LYX_AH_CHECK_DEF],
680 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
681   [Define to 1 if `$1' is defined in `$2'])])
682
683 dnl Check whether name is defined in header by using it in codesnippet.
684 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
685 dnl Defines HAVE_DEF_{NAME}
686 AC_DEFUN([LYX_CHECK_DEF],
687 [LYX_AH_CHECK_DEF($1, $2)
688  AC_MSG_CHECKING([whether $1 is defined by header $2])
689  AC_TRY_COMPILE([#include <$2>], [$3],
690      lyx_have_def_name=yes,
691      lyx_have_def_name=no)
692  AC_MSG_RESULT($lyx_have_def_name)
693  if test "x$lyx_have_def_name" = xyes; then
694    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
695  fi
696 ])
697
698 dnl Extract the single digits from PACKAGE_VERSION and make them available.
699 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
700 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
701 AC_DEFUN([LYX_SET_VERSION_INFO],
702 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
703  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
704  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
705  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
706  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
707  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
708  test "x$lyx_patch" = "x" && lyx_patch=0
709  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
710  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
711  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
712  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
713  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
714  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
715  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
716  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
717 ])
718
719 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
720 # ---------------------------------------------------------------------------
721 # Copied from autoconf 2.68, added a check that python version is < 3.0
722 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
723 # Run ACTION-IF-FALSE otherwise.
724 # This test uses sys.hexversion instead of the string equivalent (first
725 # word of sys.version), in order to cope with versions such as 2.2c1.
726 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
727 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
728  [prog="import sys
729 # split strings by '.' and convert to numeric.  Append some zeros
730 # because we need at least 4 digits for the hex conversion.
731 # map returns an iterator in Python 3.0 and a list in 2.x
732 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
733 minverhex = 0
734 maxverhex = 50331648 # = 3.0.0.0
735 # xrange is not present in Python 3.0 and range returns an iterator
736 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
737 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
738   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])