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_warning = xyes; then
78 === The following minor problems have been detected by configure.
79 === Please check the messages below before running 'make'.
80 === (see the section 'Problems' in the INSTALL file)
84 if test x$lyx_error = xyes; then
86 **** The following problems have been detected by configure.
87 **** Please check the messages below before running 'make'.
88 **** (see the section 'Problems' in the INSTALL file)
96 Configuration of LyX was successful.
97 Type 'make' to compile the program,
98 and then 'make install' to install it.
103 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
105 define(LYX_SEARCH_PROG,[dnl
106 for ac_prog in $2 ; do
107 # Extract the first word of "$ac_prog", so it can be a program name with args.
108 set dummy $ac_prog ; ac_word=$[2]
109 if test -z "[$]$1"; then
110 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
111 for ac_dir in $PATH; do
112 test -z "$ac_dir" && ac_dir=.
113 if test -f [$ac_dir/$ac_word]; then
121 if test -n "[$]$1"; then
127 test -n "[$]$1" && break
132 AC_DEFUN([LYX_PROG_CXX_WORKS],
134 cat >conftest.C <<EOF
136 // we require the mutable keyword
139 // we require namespace support
147 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
148 rm -f conftest.C conftest.o conftest.obj || true
152 AC_DEFUN([LYX_PROG_CXX],
153 [AC_MSG_CHECKING([for a good enough C++ compiler])
154 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
156 if test -z "$CXX" ; then
157 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
163 ### We might want to get or shut warnings.
164 AC_ARG_ENABLE(warnings,
165 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
166 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
171 if test x$enable_warnings = xyes ; then
172 lyx_flags="warnings $lyx_flags"
173 AC_DEFINE(WITH_WARNINGS, 1,
174 [Define this if you want to see the warning directives put here and
175 there by the developpers to get attention])
178 ### We might want to disable debug
180 AC_HELP_STRING([--enable-debug],[enable debug information]),,
181 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
187 AC_ARG_ENABLE(stdlib-debug,
188 AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
189 [ if test $lyx_devel_version = yes ; then
190 enable_stdlib_debug=yes;
192 enable_stdlib_debug=no;
195 AC_ARG_ENABLE(concept-checks,
196 AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
197 [ if test $lyx_devel_version = yes -o $lyx-prerelease = yes ; then
198 enable_concept_checks=yes;
200 enable_concept_checks=no;
203 AC_ARG_ENABLE(profiling,
204 AC_HELP_STRING([--enable-profiling],[enable profiling]),,
205 enable_profiling=no;)
207 ### set up optimization
208 AC_ARG_ENABLE(optimization,
209 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
210 enable_optimization=yes;)
211 case $enable_optimization in
213 if test $lyx_devel_version = yes ; then
219 *) lyx_opt=${enable_optimization};;
223 AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
227 # set the compiler options correctly.
228 if test x$GXX = xyes; then
229 dnl Useful for global version info
230 gxx_version=`${CXX} -dumpversion`
231 CXX_VERSION="($gxx_version)"
233 if test "$ac_test_CXXFLAGS" = set; then
234 CXXFLAGS="$ac_save_CXXFLAGS"
238 if test x$enable_debug = xyes ; then
240 CXXFLAGS="-g $CXXFLAGS"
242 if test x$enable_profiling = xyes ; then
244 CXXFLAGS="-pg $CXXFLAGS"
245 LDFLAGS="-pg $LDFLAGS"
248 if test "$ac_env_CPPFLAGS_set" != set; then
249 if test x$enable_warnings = xyes ; then
252 CPPFLAGS="-W -Wall $CPPFLAGS"
255 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
261 3.1*) AM_CXXFLAGS="-finline-limit=500 ";;
262 3.2*|3.3*) AM_CXXFLAGS="";;
265 test $enable_pch = yes && lyx_pch_comp=yes
269 if test x$enable_stdlib_debug = xyes ; then
272 lyx_flags="stdlib-debug $lyx_flags"
273 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
274 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
278 if test x$enable_concept_checks = xyes ; then
281 lyx_flags="concept-checks $lyx_flags"
282 AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
285 lyx_flags="concept-checks $lyx_flags"
286 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
291 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
292 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
296 dnl NOT USED CURRENTLY*************************************
297 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
299 AC_DEFUN([LYX_CXX_RTTI],[
300 ### Check whether the compiler supports runtime type information
301 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
305 virtual int tag() { return 0; }
307 class derived1 : public rtti {
309 int tag() { return 1; }
311 class derived2 : public rtti {
313 int tag() { return 2; }
316 derived1 * foo1 = new derived1();
317 derived2 * foo2 = new derived2();
319 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
323 bar1 = dynamic_cast<derived1 *>(bar);
328 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
330 if test x$lyx_cv_rtti = xyes ; then
331 AC_DEFINE(HAVE_RTTI, 1,
332 [Define to 1 if your compiler supports runtime type information])
336 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
337 dnl understands the "explicit" directive.
338 AC_DEFUN([LYX_CXX_EXPLICIT],[
339 ### Check whether the compiler understands the keyword `explicit'
340 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
345 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
347 if test $lyx_cv_explicit = no ; then
348 AC_DEFINE(explicit,[ ],
349 [Define to nothing if your compiler does not understand the
350 'explicit' directive])
354 dnl NOT USED CURRENTLY*************************************
355 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
356 dnl has a working stl stack template
357 AC_DEFUN([LYX_CXX_STL_STACK],[
358 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
365 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
367 if test $lyx_cv_broken_stack = yes ; then
368 AC_DEFINE(BROKEN_STL_STACK, 1,
369 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
374 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
375 dnl count template, if not the old HP version is assumed.
376 AC_DEFUN([LYX_STD_COUNT],[
377 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
381 int countChar(char * b, char * e, char const c)
383 return count(b, e, c);
387 int i = countChar(a, a + 5, 'l');
388 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
390 if test $lyx_cv_std_count = yes ; then
391 AC_DEFINE(HAVE_STD_COUNT, 1,
392 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
396 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
397 dnl supports modern STL streams
398 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
399 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
403 std::streambuf * test = std::cerr.rdbuf();
405 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
407 if test $lyx_cv_modern_streams = yes ; then
408 AC_DEFINE(MODERN_STL_STREAMS, 1,
409 [Define if you have modern standard-compliant STL streams])
413 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
415 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
416 AC_ARG_WITH(included-boost,
417 [ --with-included-boost use the boost lib supplied with LyX],
418 [lyx_cv_with_included_boost=$withval
419 AC_MSG_RESULT([$with_included_boost])],
420 [lyx_cv_with_included_boost=yes])
421 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
425 dnl NOT USED CURRENTLY*************************************
427 AC_DEFUN([LYX_CXX_PARTIAL], [
428 AC_REQUIRE([AC_PROG_CXX])
429 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
430 [lyx_cv_cxx_partial_specialization],
433 template<class T, class K>
437 template<class T> class k<void,T> { };
442 lyx_cv_cxx_partial_specialization=yes
444 lyx_cv_cxx_partial_specialization=no
447 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
448 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
449 [Defined if your compiler supports partial specialization.])
454 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
455 dnl are already in the global namespace
456 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
457 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
458 lyx_cv_cxx_global_cstd,
464 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
465 if test x$lyx_cv_cxx_global_cstd = xyes; then
466 AC_DEFINE(CXX_GLOBAL_CSTD,1,
467 [Define if your C++ compiler puts C library functions in the global namespace])
472 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
473 dnl [default-yes-value])
474 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
475 dnl resulting directory name in 'dir-var-name'.
476 AC_DEFUN([LYX_WITH_DIR],[
477 AC_ARG_WITH($1,[ --with-$1 specify $2])
478 AC_MSG_CHECKING([for $2])
479 if test -z "$with_$3"; then
480 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
482 test "x$with_$3" = xyes && with_$3=$5
485 AC_MSG_RESULT($lyx_cv_$3)])
488 dnl Usage: LYX_LOOP_DIR(value,action)
489 dnl Executes action for values of variable `dir' in `values'. `values' can
490 dnl use ":" as a separator.
491 AC_DEFUN([LYX_LOOP_DIR],[
492 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
493 for dir in `eval "echo $1"`; do
494 if test ! "$dir" = NONE; then
495 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
503 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
505 AC_DEFUN([LYX_ADD_LIB_DIR],[
507 if test "`(uname) 2>/dev/null`" = SunOS &&
508 uname -r | grep '^5' >/dev/null; then
509 if test $ac_cv_prog_gxx = yes ; then
510 $1="${$1} -Wl[,]-R$2"
517 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
519 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
521 ### Check for a headers existence and location iff it exists
522 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
523 ## It almost works. I've tried a few variations but they give errors
524 ## of one sort or other: bad substitution or file not found etc. The
525 ## actual header _is_ found though and the cache variable is set however
526 ## the reported setting (on screen) is equal to $ac_safe for some unknown
528 ## Additionally, autoheader can't figure out what to use as the name in
529 ## the config.h.in file so we need to write our own entries there -- one for
530 ## each header in the form PATH_HEADER_NAME_H
532 AC_DEFUN([LYX_PATH_HEADER],
533 [ AC_CHECK_HEADER($1,[
534 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
535 ### the only remaining problem is getting the second parameter to this
536 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
537 ### of $ac_safe being printed.
538 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
539 [ cat > conftest.$ac_ext <<EOF
540 #line __oline__ "configure"
541 #include "confdefs.h"
545 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
546 grep $1 2>/dev/null | \
547 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
548 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
550 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
552 ### end of LYX_PATH_HEADER
554 ### Check which frontends we want to use.
556 AC_DEFUN([LYX_USE_FRONTENDS],
557 [AC_MSG_CHECKING([what frontend should be used for the GUI])
558 AC_ARG_WITH(frontend,
559 [ --with-frontend=THIS Use THIS frontend as main GUI:
560 Possible values: qt3, qt4, gtk],
561 [FRONTENDS="$withval"])
562 if test "x$FRONTENDS" = x ; then
564 AC_ERROR("Please select a frontend using --with-frontend")
566 AC_MSG_RESULT($FRONTENDS)
568 AC_SUBST(FRONTENDS_SUBDIRS)
569 AC_SUBST(FRONTENDS_PROGS)
573 ## Check what kind of packaging should be used at install time.
574 ## The default is autodetected.
575 AC_DEFUN([LYX_USE_PACKAGING],
576 [AC_MSG_CHECKING([what packaging should be used])
577 AC_ARG_WITH(packaging,
578 [ --with-packaging=THIS Use THIS packaging for installation:
579 Possible values: posix, windows, macosx],
580 [lyx_use_packaging="$withval"], [
582 *-apple-darwin*) lyx_use_packaging=macosx ;;
583 *-pc-mingw32*) lyx_use_packaging=windows;;
584 *) lyx_use_packaging=posix;;
586 AC_MSG_RESULT($lyx_use_packaging)
587 case $lyx_use_packaging in
588 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
589 PACKAGE=LyX${version_suffix}
590 default_prefix="/Applications/${PACKAGE}.app"
591 bindir='${prefix}/Contents/MacOS'
592 libdir='${prefix}/Contents/Resources'
593 datadir='${prefix}/Contents/Resources'
594 pkgdatadir='${datadir}'
595 mandir='${datadir}/man' ;;
596 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
597 PACKAGE=LyX${version_suffix}
598 default_prefix="C:/Program Files/${PACKAGE}"
599 bindir='${prefix}/bin'
600 libdir='${prefix}/Resources'
601 datadir='${prefix}/Resources'
602 pkgdatadir='${datadir}'
603 mandir='${prefix}/Resources/man' ;;
604 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
605 PACKAGE=lyx${version_suffix}
606 program_suffix=$version_suffix
607 pkgdatadir='${datadir}/${PACKAGE}'
608 default_prefix=$ac_default_prefix ;;
609 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
612 AC_SUBST(program_suffix)
616 ## ------------------------------------------------------------------------
617 ## Find a file (or one of more files in a list of dirs)
618 ## ------------------------------------------------------------------------
620 AC_DEFUN([AC_FIND_FILE],
627 if test -r "$i/$j"; then
635 dnl just a wrapper to clean up configure.in
636 AC_DEFUN([LYX_PROG_LIBTOOL],
638 AC_REQUIRE([AC_ENABLE_SHARED])
639 AC_REQUIRE([AC_ENABLE_STATIC])
640 dnl libtool is only for C, so I must force him
641 dnl to find the correct flags for C++
643 ac_save_cflags="$CFLAGS"
646 AC_PROG_LIBTOOL dnl for libraries
648 CFLAGS="$ac_save_cflags"
652 ## ------------------------------------------------------------------------
653 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
654 ## one or two arguments.
656 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
657 ## ------------------------------------------------------------------------
659 AC_DEFUN([AC_FUNC_MKDIR],
660 [AC_CHECK_FUNCS([mkdir _mkdir])
661 AC_CACHE_CHECK([whether mkdir takes one argument],
662 [ac_cv_mkdir_takes_one_arg],
664 #include <sys/stat.h>
669 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
670 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
671 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
672 [Define if mkdir takes only one argument.])
677 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
678 dnl (which may be a relative path, and need not refer to any existing
681 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
682 dnl native Win32 path name, (but with slashes, not backslashes).
684 dnl On any other system, it is simply the result which would be obtained
685 dnl if PATHNAME represented an existing directory, and the pwd command was
686 dnl executed in that directory.
687 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
689 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
690 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
691 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
693 ac_dir=`AS_DIRNAME(["$ac_dir"])`
695 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
696 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
697 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'