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