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)
7 dnl Usage LYX_CHECK_VERSION Displays version of LyX being built and
8 dnl sets variables "lyx_devel_version" and "lyx_prerelease"
9 AC_DEFUN([LYX_CHECK_VERSION],[
10 echo "configuring LyX version" AC_PACKAGE_VERSION
14 AC_MSG_CHECKING([for build type])
15 AC_ARG_ENABLE(build-type,
16 AC_HELP_STRING([--enable-build-type=TYPE],[set build setting according to TYPE=dev(elopment), rel(ease) or pre(release)]),
18 dev*) lyx_devel_version=yes
19 build_type=development;;
20 pre*) lyx_prerelease=yes
21 build_type=prerelease;;
23 *) AC_ERROR([Bad build type specification \"$enableval\". Please use one of dev(elopment), rel(ease) or pre(release)]);;
25 [case AC_PACKAGE_VERSION in
26 *svn*) lyx_devel_version=yes
27 build_type=development;;
28 *pre*|*alpha*|*beta*|*rc*) lyx_prerelease=yes
29 build_type=prerelease;;
31 AC_MSG_RESULT([$build_type])
32 if test $lyx_devel_version = yes ; then
33 AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
34 LYX_DATE="not released yet"
36 AC_SUBST(lyx_devel_version)])
39 dnl Define the option to set a LyX version on installed executables and directories
42 AC_DEFUN([LYX_VERSION_SUFFIX],[
43 AC_MSG_CHECKING([for version suffix])
44 dnl We need the literal double quotes in the rpm spec file
45 RPM_VERSION_SUFFIX='""'
46 AC_ARG_WITH(version-suffix,
47 [AC_HELP_STRING([--with-version-suffix@<:@=VERSION@:>@], install lyx files as lyxVERSION (VERSION=-AC_PACKAGE_VERSION))],
48 [if test "x$withval" = "xyes";
50 withval="-"AC_PACKAGE_VERSION
51 ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
53 AC_SUBST(version_suffix,$withval)
54 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
55 AC_SUBST(RPM_VERSION_SUFFIX)
56 AC_MSG_RESULT([$withval])
60 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
61 dnl flag lyx_error to yes.
62 AC_DEFUN([LYX_ERROR],[
63 lyx_error_txt="$lyx_error_txt
69 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
70 dnl flag lyx_warning to yes.
71 AC_DEFUN([LYX_WARNING],[
72 lyx_warning_txt="$lyx_warning_txt
78 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
79 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
80 AC_DEFUN([LYX_LIB_ERROR],[
81 LYX_ERROR([Cannot find $1. Please check that the $2 library
82 is correctly installed on your system.])])
85 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
86 dnl has occured previously.
87 AC_DEFUN([LYX_CHECK_ERRORS],[
88 if test x$lyx_warning = xyes; then
90 === The following minor problems have been detected by configure.
91 === Please check the messages below before running 'make'.
92 === (see the section 'Problems' in the INSTALL file)
96 if test x$lyx_error = xyes; then
98 **** The following problems have been detected by configure.
99 **** Please check the messages below before running 'make'.
100 **** (see the section 'Problems' in the INSTALL file)
108 Configuration of LyX was successful.
109 Type 'make' to compile the program,
110 and then 'make install' to install it.
115 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
117 define(LYX_SEARCH_PROG,[dnl
118 for ac_prog in $2 ; do
119 # Extract the first word of "$ac_prog", so it can be a program name with args.
120 set dummy $ac_prog ; ac_word=$[2]
121 if test -z "[$]$1"; then
122 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
123 for ac_dir in $PATH; do
124 test -z "$ac_dir" && ac_dir=.
125 if test -f [$ac_dir/$ac_word]; then
133 if test -n "[$]$1"; then
139 test -n "[$]$1" && break
144 AC_DEFUN([LYX_PROG_CXX_WORKS],
146 cat >conftest.C <<EOF
148 // we require the mutable keyword
151 // we require namespace support
159 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
160 rm -f conftest.C conftest.o conftest.obj || true
164 AC_DEFUN([LYX_PROG_CXX],
165 [AC_MSG_CHECKING([for a good enough C++ compiler])
166 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
168 if test -z "$CXX" ; then
169 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
176 ### We might want to get or shut warnings.
177 AC_ARG_ENABLE(warnings,
178 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
179 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
184 if test x$enable_warnings = xyes ; then
185 lyx_flags="warnings $lyx_flags"
188 ### We might want to disable debug
190 AC_HELP_STRING([--enable-debug],[enable debug information]),,
191 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
197 AC_ARG_ENABLE(stdlib-debug,
198 AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
199 [ if test $lyx_devel_version = yes ; then
200 enable_stdlib_debug=yes;
202 enable_stdlib_debug=no;
205 AC_ARG_ENABLE(concept-checks,
206 AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
207 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
208 enable_concept_checks=yes;
210 enable_concept_checks=no;
213 AC_ARG_ENABLE(profiling,
214 AC_HELP_STRING([--enable-profiling],[enable profiling]),,
215 enable_profiling=no;)
217 ### set up optimization
218 AC_ARG_ENABLE(optimization,
219 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
220 enable_optimization=yes;)
221 case $enable_optimization in
223 if test $lyx_devel_version = yes ; then
229 *) lyx_opt=${enable_optimization};;
233 AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
237 AC_ARG_ENABLE(assertions,
238 AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
239 [if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
240 enable_assertions=yes;
242 enable_assertions=no;
244 if test "x$enable_assertions" = xyes ; then
245 lyx_flags="assertions $lyx_flags"
246 AC_DEFINE(ENABLE_ASSERTIONS,1,
247 [Define if you want assertions to be enabled in the code])
252 # set the compiler options correctly.
253 if test x$GXX = xyes; then
254 dnl Useful for global version info
255 gxx_version=`${CXX} -dumpversion`
256 CXX_VERSION="($gxx_version)"
258 if test "$ac_test_CXXFLAGS" = set; then
259 CXXFLAGS="$ac_save_CXXFLAGS"
263 if test x$enable_debug = xyes ; then
265 CXXFLAGS="-g $CXXFLAGS"
267 if test x$enable_profiling = xyes ; then
269 CXXFLAGS="-pg $CXXFLAGS"
270 LDFLAGS="-pg $LDFLAGS"
273 if test "$ac_env_CPPFLAGS_set" != set; then
274 if test x$enable_warnings = xyes ; then
277 CPPFLAGS="-W -Wall $CPPFLAGS"
280 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
286 3.1*) AM_CXXFLAGS="-finline-limit=500 ";;
287 3.2*|3.3*) AM_CXXFLAGS="";;
290 test $enable_pch = yes && lyx_pch_comp=yes
294 if test x$enable_stdlib_debug = xyes ; then
297 lyx_flags="stdlib-debug $lyx_flags"
298 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
299 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
303 if test x$enable_concept_checks = xyes ; then
306 lyx_flags="concept-checks $lyx_flags"
307 AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
310 lyx_flags="concept-checks $lyx_flags"
311 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
316 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
317 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
320 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
322 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
323 AC_MSG_CHECKING([whether to use boost included library])
324 AC_ARG_WITH(included-boost,
325 [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])],
326 [lyx_cv_with_included_boost=$withval],
327 [lyx_cv_with_included_boost=yes])
328 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
329 AC_MSG_RESULT([$lyx_cv_with_included_boost])
330 if test x$lyx_cv_with_included_boost != xyes ; then
331 AC_CHECK_LIB(boost_signals, main, [lyx_boost_underscore=yes], [], [-lm])
332 AC_CHECK_LIB(boost_signals-mt, main, [lyx_boost_underscore_mt=yes], [], [-lm $LIBTHREAD])
333 if test x$lyx_boost_underscore_mt = xyes ; then
337 if test x$lyx_boost_plain != xyes -a x$lyx_boost_underscore != xyes ; then
338 LYX_ERROR([No suitable boost library found (do not use --without-included-boost)])
347 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
348 dnl [default-yes-value])
349 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
350 dnl resulting directory name in 'dir-var-name'.
351 AC_DEFUN([LYX_WITH_DIR],[
352 AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
353 AC_MSG_CHECKING([for $2])
354 if test -z "$with_$3"; then
355 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
357 test "x$with_$3" = xyes && with_$3=$5
360 AC_MSG_RESULT($lyx_cv_$3)])
363 dnl Usage: LYX_LOOP_DIR(value,action)
364 dnl Executes action for values of variable `dir' in `values'. `values' can
365 dnl use ":" as a separator.
366 AC_DEFUN([LYX_LOOP_DIR],[
367 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
368 for dir in `eval "echo $1"`; do
369 if test ! "$dir" = NONE; then
370 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
378 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
380 AC_DEFUN([LYX_ADD_LIB_DIR],[
382 if test "`(uname) 2>/dev/null`" = SunOS &&
383 uname -r | grep '^5' >/dev/null; then
384 if test $ac_cv_prog_gxx = yes ; then
385 $1="${$1} -Wl[,]-R$2"
392 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
394 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
396 ### Check for a headers existence and location iff it exists
397 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
398 ## It almost works. I've tried a few variations but they give errors
399 ## of one sort or other: bad substitution or file not found etc. The
400 ## actual header _is_ found though and the cache variable is set however
401 ## the reported setting (on screen) is equal to $ac_safe for some unknown
403 ## Additionally, autoheader can't figure out what to use as the name in
404 ## the config.h.in file so we need to write our own entries there -- one for
405 ## each header in the form PATH_HEADER_NAME_H
407 AC_DEFUN([LYX_PATH_HEADER],
408 [ AC_CHECK_HEADER($1,[
409 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
410 ### the only remaining problem is getting the second parameter to this
411 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
412 ### of $ac_safe being printed.
413 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
414 [ cat > conftest.$ac_ext <<EOF
415 #line __oline__ "configure"
416 #include "confdefs.h"
420 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
421 grep $1 2>/dev/null | \
422 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
423 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
425 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
427 ### end of LYX_PATH_HEADER
429 ### Check which frontends we want to use.
431 AC_DEFUN([LYX_USE_FRONTENDS],
432 [AC_MSG_CHECKING([what frontend should be used for the GUI])
433 AC_ARG_WITH(frontend,
434 [AC_HELP_STRING([--with-frontend=THIS], [use THIS frontend as main GUI:
435 Possible values: qt4])],
436 [FRONTENDS="$withval"],[FRONTENDS="qt4"])
437 if test "x$FRONTENDS" = x ; then
439 AC_ERROR("Please select a frontend using --with-frontend")
441 AC_MSG_RESULT($FRONTENDS)
443 AC_SUBST(FRONTENDS_SUBDIRS)
444 AC_SUBST(FRONTENDS_PROGS)
448 ## Check what kind of packaging should be used at install time.
449 ## The default is autodetected.
450 AC_DEFUN([LYX_USE_PACKAGING],
451 [AC_MSG_CHECKING([what packaging should be used])
452 AC_ARG_WITH(packaging,
453 [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
454 Possible values: posix, windows, macosx])],
455 [lyx_use_packaging="$withval"], [
457 *-apple-darwin*) lyx_use_packaging=macosx ;;
458 *-pc-mingw32*) lyx_use_packaging=windows;;
459 *) lyx_use_packaging=posix;;
461 AC_MSG_RESULT($lyx_use_packaging)
462 lyx_install_macosx=false
463 lyx_install_cygwin=false
464 lyx_install_windows=false
465 case $lyx_use_packaging in
466 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
467 PACKAGE=LyX${version_suffix}
468 default_prefix="/Applications/${PACKAGE}.app"
469 bindir='${prefix}/Contents/MacOS'
470 libdir='${prefix}/Contents/Resources'
471 datarootdir='${prefix}/Contents/Resources'
472 pkgdatadir='${datadir}'
473 mandir='${datadir}/man'
474 lyx_install_macosx=true ;;
475 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
476 PACKAGE=LyX${version_suffix}
477 default_prefix="C:/Program Files/${PACKAGE}"
478 bindir='${prefix}/bin'
479 libdir='${prefix}/Resources'
480 datarootdir='${prefix}/Resources'
481 pkgdatadir='${datadir}'
482 mandir='${prefix}/Resources/man'
483 lyx_install_windows=true ;;
484 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
485 PACKAGE=lyx${version_suffix}
486 program_suffix=$version_suffix
487 pkgdatadir='${datadir}/${PACKAGE}'
488 default_prefix=$ac_default_prefix
490 *cygwin*) lyx_install_cygwin=true ;;
492 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
494 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
495 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
496 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
497 dnl Next two lines are only for autoconf <= 2.59
498 datadir='${datarootdir}'
499 AC_SUBST(datarootdir)
501 AC_SUBST(program_suffix)
505 ## ------------------------------------------------------------------------
506 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
507 ## one or two arguments.
509 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
510 ## ------------------------------------------------------------------------
512 AC_DEFUN([AC_FUNC_MKDIR],
513 [AC_CHECK_FUNCS([mkdir _mkdir])
514 AC_CACHE_CHECK([whether mkdir takes one argument],
515 [ac_cv_mkdir_takes_one_arg],
517 #include <sys/stat.h>
522 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
523 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
524 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
525 [Define if mkdir takes only one argument.])
530 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
531 dnl (which may be a relative path, and need not refer to any existing
534 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
535 dnl native Win32 path name, (but with slashes, not backslashes).
537 dnl On any other system, it is simply the result which would be obtained
538 dnl if PATHNAME represented an existing directory, and the pwd command was
539 dnl executed in that directory.
540 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
542 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
543 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
544 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
546 ac_dir=`AS_DIRNAME(["$ac_dir"])`
548 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
549 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
550 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
554 dnl this is used by the macro blow to general a proper config.h.in entry
555 m4_define([LYX_AH_CHECK_DECL],
556 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
557 [Define if you have the prototype for function `$1'])])
559 dnl Check things are declared in headers to avoid errors or warnings.
560 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
561 dnl Defines HAVE_DECL_{FUNCTION}
562 AC_DEFUN([LYX_CHECK_DECL],
563 [LYX_AH_CHECK_DECL($1)
566 AC_MSG_CHECKING([if $1 is declared by header $ac_header])
567 AC_EGREP_HEADER($1, $ac_header,
569 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
574 dnl Extract the single digits from PACKAGE_VERSION and make them available.
575 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
576 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
577 AC_DEFUN([LYX_SET_VERSION_INFO],
578 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
579 lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
580 lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
581 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
582 lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
583 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
584 test "x$lyx_patch" = "x" && lyx_patch=0
585 lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
586 lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
587 AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
588 AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
589 AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
590 AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
591 AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
592 AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")