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
11 if echo AC_PACKAGE_VERSION | grep 'svn' >/dev/null ; then
13 AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
14 LYX_DATE="not released yet"
15 echo "WARNING: This is a development version. Expect bugs."
19 if echo AC_PACKAGE_VERSION | grep 'pre' > /dev/null ; then
21 echo "WARNING: This is a prerelease. Be careful and backup your documents."
25 AC_SUBST(lyx_devel_version)])
28 dnl Define the option to set a LyX version on installed executables and directories
31 AC_DEFUN([LYX_VERSION_SUFFIX],[
32 AC_MSG_CHECKING([for version suffix])
33 dnl We need the literal double quotes in the rpm spec file
34 RPM_VERSION_SUFFIX='""'
35 AC_ARG_WITH(version-suffix,
36 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
37 [if test "x$withval" = "xyes";
39 withval="-"AC_PACKAGE_VERSION
40 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
42 version_suffix=$withval
43 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
44 AC_SUBST(RPM_VERSION_SUFFIX)
45 AC_MSG_RESULT([$withval])
49 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
50 dnl flag lyx_error to yes.
51 AC_DEFUN([LYX_ERROR],[
52 lyx_error_txt="$lyx_error_txt
58 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
59 dnl flag lyx_warning to yes.
60 AC_DEFUN([LYX_WARNING],[
61 lyx_warning_txt="$lyx_warning_txt
67 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
68 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
69 AC_DEFUN([LYX_LIB_ERROR],[
70 LYX_ERROR([Cannot find $1. Please check that the $2 library
71 is correctly installed on your system.])])
74 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
75 dnl has occured previously.
76 AC_DEFUN([LYX_CHECK_ERRORS],[
77 if test x$lyx_warning = xyes; then
79 === The following minor problems have been detected by configure.
80 === Please check the messages below before running 'make'.
81 === (see the section 'Problems' in the INSTALL file)
85 if test x$lyx_error = xyes; then
87 **** The following problems have been detected by configure.
88 **** Please check the messages below before running 'make'.
89 **** (see the section 'Problems' in the INSTALL file)
97 Configuration of LyX was successful.
98 Type 'make' to compile the program,
99 and then 'make install' to install it.
104 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
106 define(LYX_SEARCH_PROG,[dnl
107 for ac_prog in $2 ; do
108 # Extract the first word of "$ac_prog", so it can be a program name with args.
109 set dummy $ac_prog ; ac_word=$[2]
110 if test -z "[$]$1"; then
111 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
112 for ac_dir in $PATH; do
113 test -z "$ac_dir" && ac_dir=.
114 if test -f [$ac_dir/$ac_word]; then
122 if test -n "[$]$1"; then
128 test -n "[$]$1" && break
133 AC_DEFUN([LYX_PROG_CXX_WORKS],
135 cat >conftest.C <<EOF
137 // we require the mutable keyword
140 // we require namespace support
148 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
149 rm -f conftest.C conftest.o conftest.obj || true
153 AC_DEFUN([LYX_PROG_CXX],
154 [AC_MSG_CHECKING([for a good enough C++ compiler])
155 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
157 if test -z "$CXX" ; then
158 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
164 ### We might want to get or shut warnings.
165 AC_ARG_ENABLE(warnings,
166 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
167 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
172 if test x$enable_warnings = xyes ; then
173 lyx_flags="warnings $lyx_flags"
174 AC_DEFINE(WITH_WARNINGS, 1,
175 [Define this if you want to see the warning directives put here and
176 there by the developpers to get attention])
179 ### We might want to disable debug
181 AC_HELP_STRING([--enable-debug],[enable debug information]),,
182 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
188 AC_ARG_ENABLE(stdlib-debug,
189 AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
190 [ if test $lyx_devel_version = yes ; then
191 enable_stdlib_debug=yes;
193 enable_stdlib_debug=no;
196 AC_ARG_ENABLE(concept-checks,
197 AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
198 [ if test $lyx_devel_version = yes -o $lyx-prerelease = yes ; then
199 enable_concept_checks=yes;
201 enable_concept_checks=no;
204 AC_ARG_ENABLE(profiling,
205 AC_HELP_STRING([--enable-profiling],[enable profiling]),,
206 enable_profiling=no;)
208 ### set up optimization
209 AC_ARG_ENABLE(optimization,
210 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
211 enable_optimization=yes;)
212 case $enable_optimization in
214 if test $lyx_devel_version = yes ; then
220 *) lyx_opt=${enable_optimization};;
224 AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
228 # set the compiler options correctly.
229 if test x$GXX = xyes; then
230 dnl Useful for global version info
231 gxx_version=`${CXX} -dumpversion`
232 CXX_VERSION="($gxx_version)"
234 if test "$ac_test_CXXFLAGS" = set; then
235 CXXFLAGS="$ac_save_CXXFLAGS"
239 if test x$enable_debug = xyes ; then
241 CXXFLAGS="-g $CXXFLAGS"
243 if test x$enable_profiling = xyes ; then
245 CXXFLAGS="-pg $CXXFLAGS"
246 LDFLAGS="-pg $LDFLAGS"
249 if test "$ac_env_CPPFLAGS_set" != set; then
250 if test x$enable_warnings = xyes ; then
253 CPPFLAGS="-W -Wall $CPPFLAGS"
256 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
262 3.1*) AM_CXXFLAGS="-finline-limit=500 ";;
263 3.2*|3.3*) AM_CXXFLAGS="";;
266 test $enable_pch = yes && lyx_pch_comp=yes
270 if test x$enable_stdlib_debug = xyes ; then
273 lyx_flags="stdlib-debug $lyx_flags"
274 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
275 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
279 if test x$enable_concept_checks = xyes ; then
282 lyx_flags="concept-checks $lyx_flags"
283 AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
286 lyx_flags="concept-checks $lyx_flags"
287 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
292 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
293 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
297 dnl NOT USED CURRENTLY*************************************
298 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
300 AC_DEFUN([LYX_CXX_RTTI],[
301 ### Check whether the compiler supports runtime type information
302 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
306 virtual int tag() { return 0; }
308 class derived1 : public rtti {
310 int tag() { return 1; }
312 class derived2 : public rtti {
314 int tag() { return 2; }
317 derived1 * foo1 = new derived1();
318 derived2 * foo2 = new derived2();
320 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
324 bar1 = dynamic_cast<derived1 *>(bar);
329 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
331 if test x$lyx_cv_rtti = xyes ; then
332 AC_DEFINE(HAVE_RTTI, 1,
333 [Define to 1 if your compiler supports runtime type information])
337 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
338 dnl understands the "explicit" directive.
339 AC_DEFUN([LYX_CXX_EXPLICIT],[
340 ### Check whether the compiler understands the keyword `explicit'
341 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
346 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
348 if test $lyx_cv_explicit = no ; then
349 AC_DEFINE(explicit,[ ],
350 [Define to nothing if your compiler does not understand the
351 'explicit' directive])
355 dnl NOT USED CURRENTLY*************************************
356 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
357 dnl has a working stl stack template
358 AC_DEFUN([LYX_CXX_STL_STACK],[
359 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
366 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
368 if test $lyx_cv_broken_stack = yes ; then
369 AC_DEFINE(BROKEN_STL_STACK, 1,
370 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
375 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
376 dnl count template, if not the old HP version is assumed.
377 AC_DEFUN([LYX_STD_COUNT],[
378 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
382 int countChar(char * b, char * e, char const c)
384 return count(b, e, c);
388 int i = countChar(a, a + 5, 'l');
389 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
391 if test $lyx_cv_std_count = yes ; then
392 AC_DEFINE(HAVE_STD_COUNT, 1,
393 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
397 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
398 dnl supports modern STL streams
399 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
400 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
404 std::streambuf * test = std::cerr.rdbuf();
406 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
408 if test $lyx_cv_modern_streams = yes ; then
409 AC_DEFINE(MODERN_STL_STREAMS, 1,
410 [Define if you have modern standard-compliant STL streams])
414 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
416 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
417 AC_ARG_WITH(included-boost,
418 [ --with-included-boost use the boost lib supplied with LyX],
419 [lyx_cv_with_included_boost=$withval
420 AC_MSG_RESULT([$with_included_boost])],
421 [lyx_cv_with_included_boost=yes])
422 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
426 dnl NOT USED CURRENTLY*************************************
428 AC_DEFUN([LYX_CXX_PARTIAL], [
429 AC_REQUIRE([AC_PROG_CXX])
430 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
431 [lyx_cv_cxx_partial_specialization],
434 template<class T, class K>
438 template<class T> class k<void,T> { };
443 lyx_cv_cxx_partial_specialization=yes
445 lyx_cv_cxx_partial_specialization=no
448 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
449 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
450 [Defined if your compiler supports partial specialization.])
455 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
456 dnl are already in the global namespace
457 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
458 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
459 lyx_cv_cxx_global_cstd,
465 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
466 if test x$lyx_cv_cxx_global_cstd = xyes; then
467 AC_DEFINE(CXX_GLOBAL_CSTD,1,
468 [Define if your C++ compiler puts C library functions in the global namespace])
473 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
474 dnl [default-yes-value])
475 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
476 dnl resulting directory name in 'dir-var-name'.
477 AC_DEFUN([LYX_WITH_DIR],[
478 AC_ARG_WITH($1,[ --with-$1 specify $2])
479 AC_MSG_CHECKING([for $2])
480 if test -z "$with_$3"; then
481 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
483 test "x$with_$3" = xyes && with_$3=$5
486 AC_MSG_RESULT($lyx_cv_$3)])
489 dnl Usage: LYX_LOOP_DIR(value,action)
490 dnl Executes action for values of variable `dir' in `values'. `values' can
491 dnl use ":" as a separator.
492 AC_DEFUN([LYX_LOOP_DIR],[
493 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
494 for dir in `eval "echo $1"`; do
495 if test ! "$dir" = NONE; then
496 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
504 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
506 AC_DEFUN([LYX_ADD_LIB_DIR],[
508 if test "`(uname) 2>/dev/null`" = SunOS &&
509 uname -r | grep '^5' >/dev/null; then
510 if test $ac_cv_prog_gxx = yes ; then
511 $1="${$1} -Wl[,]-R$2"
518 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
520 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
522 ### Check for a headers existence and location iff it exists
523 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
524 ## It almost works. I've tried a few variations but they give errors
525 ## of one sort or other: bad substitution or file not found etc. The
526 ## actual header _is_ found though and the cache variable is set however
527 ## the reported setting (on screen) is equal to $ac_safe for some unknown
529 ## Additionally, autoheader can't figure out what to use as the name in
530 ## the config.h.in file so we need to write our own entries there -- one for
531 ## each header in the form PATH_HEADER_NAME_H
533 AC_DEFUN([LYX_PATH_HEADER],
534 [ AC_CHECK_HEADER($1,[
535 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
536 ### the only remaining problem is getting the second parameter to this
537 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
538 ### of $ac_safe being printed.
539 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
540 [ cat > conftest.$ac_ext <<EOF
541 #line __oline__ "configure"
542 #include "confdefs.h"
546 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
547 grep $1 2>/dev/null | \
548 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
549 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
551 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
553 ### end of LYX_PATH_HEADER
555 ### Check which frontends we want to use.
557 AC_DEFUN([LYX_USE_FRONTENDS],
558 [AC_MSG_CHECKING([what frontend should be used for the GUI])
559 AC_ARG_WITH(frontend,
560 [ --with-frontend=THIS Use THIS frontend as main GUI:
561 Possible values: qt4],
562 [FRONTENDS="$withval"])
563 if test "x$FRONTENDS" = x ; then
565 AC_ERROR("Please select a frontend using --with-frontend")
567 AC_MSG_RESULT($FRONTENDS)
569 AC_SUBST(FRONTENDS_SUBDIRS)
570 AC_SUBST(FRONTENDS_PROGS)
574 ## Check what kind of packaging should be used at install time.
575 ## The default is autodetected.
576 AC_DEFUN([LYX_USE_PACKAGING],
577 [AC_MSG_CHECKING([what packaging should be used])
578 AC_ARG_WITH(packaging,
579 [ --with-packaging=THIS Use THIS packaging for installation:
580 Possible values: posix, windows, macosx],
581 [lyx_use_packaging="$withval"], [
583 *-apple-darwin*) lyx_use_packaging=macosx ;;
584 *-pc-mingw32*) lyx_use_packaging=windows;;
585 *) lyx_use_packaging=posix;;
587 AC_MSG_RESULT($lyx_use_packaging)
588 case $lyx_use_packaging in
589 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
590 PACKAGE=LyX${version_suffix}
591 default_prefix="/Applications/${PACKAGE}.app"
592 bindir='${prefix}/Contents/MacOS'
593 libdir='${prefix}/Contents/Resources'
594 datadir='${prefix}/Contents/Resources'
595 pkgdatadir='${datadir}'
596 mandir='${datadir}/man' ;;
597 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
598 PACKAGE=LyX${version_suffix}
599 default_prefix="C:/Program Files/${PACKAGE}"
600 bindir='${prefix}/bin'
601 libdir='${prefix}/Resources'
602 datadir='${prefix}/Resources'
603 pkgdatadir='${datadir}'
604 mandir='${prefix}/Resources/man' ;;
605 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
606 PACKAGE=lyx${version_suffix}
607 program_suffix=$version_suffix
608 pkgdatadir='${datadir}/${PACKAGE}'
609 default_prefix=$ac_default_prefix ;;
610 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
613 AC_SUBST(program_suffix)
617 ## ------------------------------------------------------------------------
618 ## Find a file (or one of more files in a list of dirs)
619 ## ------------------------------------------------------------------------
621 AC_DEFUN([AC_FIND_FILE],
628 if test -r "$i/$j"; then
636 dnl just a wrapper to clean up configure.in
637 AC_DEFUN([LYX_PROG_LIBTOOL],
639 AC_REQUIRE([AC_ENABLE_SHARED])
640 AC_REQUIRE([AC_ENABLE_STATIC])
641 dnl libtool is only for C, so I must force him
642 dnl to find the correct flags for C++
644 ac_save_cflags="$CFLAGS"
647 AC_PROG_LIBTOOL dnl for libraries
649 CFLAGS="$ac_save_cflags"
653 ## ------------------------------------------------------------------------
654 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
655 ## one or two arguments.
657 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
658 ## ------------------------------------------------------------------------
660 AC_DEFUN([AC_FUNC_MKDIR],
661 [AC_CHECK_FUNCS([mkdir _mkdir])
662 AC_CACHE_CHECK([whether mkdir takes one argument],
663 [ac_cv_mkdir_takes_one_arg],
665 #include <sys/stat.h>
670 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
671 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
672 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
673 [Define if mkdir takes only one argument.])
678 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
679 dnl (which may be a relative path, and need not refer to any existing
682 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
683 dnl native Win32 path name, (but with slashes, not backslashes).
685 dnl On any other system, it is simply the result which would be obtained
686 dnl if PATHNAME represented an existing directory, and the pwd command was
687 dnl executed in that directory.
688 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
690 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
691 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
692 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
694 ac_dir=`AS_DIRNAME(["$ac_dir"])`
696 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
697 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
698 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'