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