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