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