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 echo "WARNING: This is a development version. Expect bugs."
18 if echo AC_PACKAGE_VERSION | grep 'pre' > /dev/null ; then
20 echo "WARNING: This is a prerelease. Be careful and backup your documents."
24 AC_SUBST(lyx_devel_version)])
27 dnl Define the option to set a LyX version on installed executables and directories
30 AC_DEFUN([LYX_VERSION_SUFFIX],[
31 AC_MSG_CHECKING([for version suffix])
32 dnl We need the literal double quotes in the rpm spec file
33 RPM_VERSION_SUFFIX='""'
34 AC_ARG_WITH(version-suffix,
35 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
36 [if test "x$withval" = "xyes";
38 withval="-"AC_PACKAGE_VERSION
39 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
41 version_suffix=$withval
42 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
43 AC_SUBST(RPM_VERSION_SUFFIX)
44 AC_MSG_RESULT([$withval])
48 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
49 dnl flag lyx_error to yes.
50 AC_DEFUN([LYX_ERROR],[
51 lyx_error_txt="$lyx_error_txt
57 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
58 dnl flag lyx_warning to yes.
59 AC_DEFUN([LYX_WARNING],[
60 lyx_warning_txt="$lyx_warning_txt
66 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
67 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
68 AC_DEFUN([LYX_LIB_ERROR],[
69 LYX_ERROR([Cannot find $1. Please check that the $2 library
70 is correctly installed on your system.])])
73 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
74 dnl has occured previously.
75 AC_DEFUN([LYX_CHECK_ERRORS],[
76 if test x$lyx_error = xyes; then
78 **** The following problems have been detected by configure.
79 **** Please check the messages below before running 'make'.
80 **** (see the section 'Problems' in the INSTALL file)
86 if test x$lyx_warning = xyes; then
88 === The following minor problems have been detected by configure.
89 === Please check the messages below before running 'make'.
90 === (see the section 'Problems' in the INSTALL file)
95 Configuration of LyX was successful.
96 Type 'make' to compile the program,
97 and then 'make install' to install it.
102 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
104 define(LYX_SEARCH_PROG,[dnl
105 for ac_prog in $2 ; do
106 # Extract the first word of "$ac_prog", so it can be a program name with args.
107 set dummy $ac_prog ; ac_word=$[2]
108 if test -z "[$]$1"; then
109 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
110 for ac_dir in $PATH; do
111 test -z "$ac_dir" && ac_dir=.
112 if test -f [$ac_dir/$ac_word]; then
120 if test -n "[$]$1"; then
126 test -n "[$]$1" && break
131 AC_DEFUN([LYX_PROG_CXX_WORKS],
133 cat >conftest.C <<EOF
135 // we require the mutable keyword
138 // we require namespace support
146 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
147 rm -f conftest.C conftest.o conftest.obj || true
151 AC_DEFUN([LYX_PROG_CXX],
152 [AC_MSG_CHECKING([for a good enough C++ compiler])
153 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
155 if test -z "$CXX" ; then
156 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
162 ### We might want to get or shut warnings.
163 AC_ARG_ENABLE(warnings,
164 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
165 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
170 if test x$enable_warnings = xyes ; then
171 lyx_flags="warnings $lyx_flags"
172 AC_DEFINE(WITH_WARNINGS, 1,
173 [Define this if you want to see the warning directives put here and
174 there by the developpers to get attention])
177 ### We might want to disable debug
179 AC_HELP_STRING([--enable-debug],[enable debug information]),,
180 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
186 AC_ARG_ENABLE(stdlib-debug,
187 AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
188 [ if test $lyx_devel_version = yes ; then
189 enable_stdlib_debug=yes;
191 enable_stdlib_debug=no;
194 AC_ARG_ENABLE(concept-checks,
195 AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
196 [ if test $lyx_devel_version = yes -o $lyx-prerelease = yes ; then
197 enable_concept_checks=yes;
199 enable_concept_checks=no;
202 AC_ARG_ENABLE(profiling,
203 AC_HELP_STRING([--enable-profiling],[enable profiling]),,
204 enable_profiling=no;)
206 ### set up optimization
207 AC_ARG_ENABLE(optimization,
208 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
209 enable_optimization=yes;)
210 case $enable_optimization in
212 if test $lyx_devel_version = yes ; then
218 *) lyx_opt=${enable_optimization};;
222 AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
226 # set the compiler options correctly.
227 if test x$GXX = xyes; then
228 dnl Useful for global version info
229 gxx_version=`${CXX} -dumpversion`
230 CXX_VERSION="($gxx_version)"
232 if test "$ac_test_CXXFLAGS" = set; then
233 CXXFLAGS="$ac_save_CXXFLAGS"
237 if test x$enable_debug = xyes ; then
239 CXXFLAGS="-g $CXXFLAGS"
241 if test x$enable_profiling = xyes ; then
243 CXXFLAGS="-pg $CXXFLAGS"
244 LDFLAGS="-pg $LDFLAGS"
247 if test "$ac_env_CPPFLAGS_set" != set; then
248 if test x$enable_warnings = xyes ; then
251 CPPFLAGS="-W -Wall $CPPFLAGS"
254 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
260 3.1*) AM_CXXFLAGS="-finline-limit=500 ";;
261 3.2*|3.3*) AM_CXXFLAGS="";;
264 test $enable_pch = yes && lyx_pch_comp=yes
268 if test x$enable_stdlib_debug = xyes ; then
271 lyx_flags="stdlib-debug $lyx_flags"
272 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
273 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
277 if test x$enable_concept_checks = xyes ; then
280 lyx_flags="concept-checks $lyx_flags"
281 AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
284 lyx_flags="concept-checks $lyx_flags"
285 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
290 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
291 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
295 dnl NOT USED CURRENTLY*************************************
296 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
298 AC_DEFUN([LYX_CXX_RTTI],[
299 ### Check whether the compiler supports runtime type information
300 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
304 virtual int tag() { return 0; }
306 class derived1 : public rtti {
308 int tag() { return 1; }
310 class derived2 : public rtti {
312 int tag() { return 2; }
315 derived1 * foo1 = new derived1();
316 derived2 * foo2 = new derived2();
318 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
322 bar1 = dynamic_cast<derived1 *>(bar);
327 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
329 if test x$lyx_cv_rtti = xyes ; then
330 AC_DEFINE(HAVE_RTTI, 1,
331 [Define to 1 if your compiler supports runtime type information])
335 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
336 dnl understands the "explicit" directive.
337 AC_DEFUN([LYX_CXX_EXPLICIT],[
338 ### Check whether the compiler understands the keyword `explicit'
339 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
344 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
346 if test $lyx_cv_explicit = no ; then
347 AC_DEFINE(explicit,[ ],
348 [Define to nothing if your compiler does not understand the
349 'explicit' directive])
353 dnl NOT USED CURRENTLY*************************************
354 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
355 dnl has a working stl stack template
356 AC_DEFUN([LYX_CXX_STL_STACK],[
357 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
364 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
366 if test $lyx_cv_broken_stack = yes ; then
367 AC_DEFINE(BROKEN_STL_STACK, 1,
368 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
373 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
374 dnl count template, if not the old HP version is assumed.
375 AC_DEFUN([LYX_STD_COUNT],[
376 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
380 int countChar(char * b, char * e, char const c)
382 return count(b, e, c);
386 int i = countChar(a, a + 5, 'l');
387 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
389 if test $lyx_cv_std_count = yes ; then
390 AC_DEFINE(HAVE_STD_COUNT, 1,
391 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
395 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
396 dnl supports modern STL streams
397 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
398 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
402 std::streambuf * test = std::cerr.rdbuf();
404 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
406 if test $lyx_cv_modern_streams = yes ; then
407 AC_DEFINE(MODERN_STL_STREAMS, 1,
408 [Define if you have modern standard-compliant STL streams])
412 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
414 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
415 AC_ARG_WITH(included-boost,
416 [ --with-included-boost use the boost lib supplied with LyX],
417 [lyx_cv_with_included_boost=$withval
418 AC_MSG_RESULT([$with_included_boost])],
419 [lyx_cv_with_included_boost=yes])
420 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
424 dnl NOT USED CURRENTLY*************************************
426 AC_DEFUN([LYX_CXX_PARTIAL], [
427 AC_REQUIRE([AC_PROG_CXX])
428 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
429 [lyx_cv_cxx_partial_specialization],
432 template<class T, class K>
436 template<class T> class k<void,T> { };
441 lyx_cv_cxx_partial_specialization=yes
443 lyx_cv_cxx_partial_specialization=no
446 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
447 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
448 [Defined if your compiler supports partial specialization.])
453 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
454 dnl are already in the global namespace
455 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
456 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
457 lyx_cv_cxx_global_cstd,
463 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
464 if test x$lyx_cv_cxx_global_cstd = xyes; then
465 AC_DEFINE(CXX_GLOBAL_CSTD,1,
466 [Define if your C++ compiler puts C library functions in the global namespace])
471 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
472 dnl [default-yes-value])
473 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
474 dnl resulting directory name in 'dir-var-name'.
475 AC_DEFUN([LYX_WITH_DIR],[
476 AC_ARG_WITH($1,[ --with-$1 specify $2])
477 AC_MSG_CHECKING([for $2])
478 if test -z "$with_$3"; then
479 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
481 test "x$with_$3" = xyes && with_$3=$5
484 AC_MSG_RESULT($lyx_cv_$3)])
487 dnl Usage: LYX_LOOP_DIR(value,action)
488 dnl Executes action for values of variable `dir' in `values'. `values' can
489 dnl use ":" as a separator.
490 AC_DEFUN([LYX_LOOP_DIR],[
491 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
492 for dir in `eval "echo $1"`; do
493 if test ! "$dir" = NONE; then
494 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
502 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
504 AC_DEFUN([LYX_ADD_LIB_DIR],[
506 if test "`(uname) 2>/dev/null`" = SunOS &&
507 uname -r | grep '^5' >/dev/null; then
508 if test $ac_cv_prog_gxx = yes ; then
509 $1="${$1} -Wl[,]-R$2"
516 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
518 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
520 ### Check for a headers existence and location iff it exists
521 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
522 ## It almost works. I've tried a few variations but they give errors
523 ## of one sort or other: bad substitution or file not found etc. The
524 ## actual header _is_ found though and the cache variable is set however
525 ## the reported setting (on screen) is equal to $ac_safe for some unknown
527 ## Additionally, autoheader can't figure out what to use as the name in
528 ## the config.h.in file so we need to write our own entries there -- one for
529 ## each header in the form PATH_HEADER_NAME_H
531 AC_DEFUN([LYX_PATH_HEADER],
532 [ AC_CHECK_HEADER($1,[
533 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
534 ### the only remaining problem is getting the second parameter to this
535 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
536 ### of $ac_safe being printed.
537 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
538 [ cat > conftest.$ac_ext <<EOF
539 #line __oline__ "configure"
540 #include "confdefs.h"
544 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
545 grep $1 2>/dev/null | \
546 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
547 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
549 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
551 ### end of LYX_PATH_HEADER
553 ### Check which frontends we want to use.
555 AC_DEFUN([LYX_USE_FRONTENDS],
556 [AC_MSG_CHECKING([what frontend should be used for the GUI])
557 AC_ARG_WITH(frontend,
558 [ --with-frontend=THIS Use THIS frontend as main GUI:
559 Possible values: qt3, qt4, gtk],
560 [FRONTENDS="$withval"])
561 if test "x$FRONTENDS" = x ; then
563 AC_ERROR("Please select a frontend using --with-frontend")
565 AC_MSG_RESULT($FRONTENDS)
567 AC_SUBST(FRONTENDS_SUBDIRS)
568 AC_SUBST(FRONTENDS_PROGS)
572 ## Check what kind of packaging should be used at install time.
573 ## The default is autodetected.
574 AC_DEFUN([LYX_USE_PACKAGING],
575 [AC_MSG_CHECKING([what packaging should be used])
576 AC_ARG_WITH(packaging,
577 [ --with-packaging=THIS Use THIS packaging for installation:
578 Possible values: posix, windows, macosx],
579 [lyx_use_packaging="$withval"], [
581 *-apple-darwin*) lyx_use_packaging=macosx ;;
582 *-pc-mingw32*) lyx_use_packaging=windows;;
583 *) lyx_use_packaging=posix;;
585 AC_MSG_RESULT($lyx_use_packaging)
586 case $lyx_use_packaging in
587 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
588 PACKAGE=LyX${version_suffix}
589 default_prefix="/Applications/${PACKAGE}.app"
590 bindir='${prefix}/Contents/MacOS'
591 libdir='${prefix}/Contents/Resources'
592 datadir='${prefix}/Contents/Resources'
593 pkgdatadir='${datadir}'
594 mandir='${datadir}/man' ;;
595 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
596 PACKAGE=LyX${version_suffix}
597 default_prefix="C:/Program Files/${PACKAGE}"
598 bindir='${prefix}/bin'
599 libdir='${prefix}/Resources'
600 datadir='${prefix}/Resources'
601 pkgdatadir='${datadir}'
602 mandir='${prefix}/Resources/man' ;;
603 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
604 PACKAGE=lyx${version_suffix}
605 program_suffix=$version_suffix
606 pkgdatadir='${datadir}/${PACKAGE}'
607 default_prefix=$ac_default_prefix ;;
608 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
611 AC_SUBST(program_suffix)
615 ## ------------------------------------------------------------------------
616 ## Find a file (or one of more files in a list of dirs)
617 ## ------------------------------------------------------------------------
619 AC_DEFUN([AC_FIND_FILE],
626 if test -r "$i/$j"; then
634 dnl just a wrapper to clean up configure.in
635 AC_DEFUN([LYX_PROG_LIBTOOL],
637 AC_REQUIRE([AC_ENABLE_SHARED])
638 AC_REQUIRE([AC_ENABLE_STATIC])
639 dnl libtool is only for C, so I must force him
640 dnl to find the correct flags for C++
642 ac_save_cflags="$CFLAGS"
645 AC_PROG_LIBTOOL dnl for libraries
647 CFLAGS="$ac_save_cflags"
651 ## ------------------------------------------------------------------------
652 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
653 ## one or two arguments.
655 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
656 ## ------------------------------------------------------------------------
658 AC_DEFUN([AC_FUNC_MKDIR],
659 [AC_CHECK_FUNCS([mkdir _mkdir])
660 AC_CACHE_CHECK([whether mkdir takes one argument],
661 [ac_cv_mkdir_takes_one_arg],
663 #include <sys/stat.h>
668 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
669 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
670 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
671 [Define if mkdir takes only one argument.])
676 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
677 dnl (which may be a relative path, and need not refer to any existing
680 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
681 dnl native Win32 path name, (but with slashes, not backslashes).
683 dnl On any other system, it is simply the result which would be obtained
684 dnl if PATHNAME represented an existing directory, and the pwd command was
685 dnl executed in that directory.
686 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
688 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
689 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
690 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
692 ac_dir=`AS_DIRNAME(["$ac_dir"])`
694 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
695 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
696 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'