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 $VERSION"
11 if echo "$VERSION" | grep 'cvs' >/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 "$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 install target ... ])
32 RPM_VERSION_SUFFIX='""'
33 AC_ARG_WITH(version-suffix,
34 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
35 [if test "x$withval" = "xyes";
38 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
41 program_suffix=$withval
42 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"],
44 AC_SUBST(RPM_VERSION_SUFFIX)
45 AC_MSG_RESULT([$lyxname])
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_error = xyes; then
79 **** The following problems have been detected by configure.
80 **** Please check the messages below before running 'make'.
81 **** (see the section 'Problems' in the INSTALL file)
87 if test x$lyx_warning = xyes; then
89 === The following minor problems have been detected by configure.
90 === Please check the messages below before running 'make'.
91 === (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 -o $lyx_prerelease = 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"
247 if test x$enable_warnings = xyes ; then
250 CPPFLAGS="-W -Wall $CPPFLAGS"
253 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
259 2.95.1) AM_CXXFLAGS="-fpermissive -ftemplate-depth-30";;
260 2.95.*) AM_CXXFLAGS="-Wno-non-template-friend -ftemplate-depth-30";;
261 2.96*) AM_CXXFLAGS="-fno-exceptions -ftemplate-depth-30 -Wno-non-template-friend";;
262 3.1*) AM_CXXFLAGS="-finline-limit=500 -fno-exceptions";;
263 3.2*|3.3*) AM_CXXFLAGS="-fno-exceptions";;
265 AM_CXXFLAGS="-fno-exceptions"
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. The default is XForms only
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: xforms, qt, gtk(EXPERIMENTAL)],
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 test $PACKAGE = "lyx" && PACKAGE=LyX
591 default_prefix="/Applications/LyX.app"
592 bindir='${prefix}/Contents/MacOS'
593 libdir='${prefix}/Contents/Resources'
594 datadir='${prefix}/Contents/Resources'
595 mandir='${prefix}/Contents/Resources/man' ;;
596 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
597 test $PACKAGE = "lyx" && PACKAGE=LyX
598 default_prefix="C:/Program Files/LyX"
599 bindir='${prefix}/bin'
600 libdir='${prefix}/Resources'
601 datadir='${prefix}/Resources'
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 default_prefix=$ac_default_prefix ;;
605 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
610 ## ------------------------------------------------------------------------
611 ## Find a file (or one of more files in a list of dirs)
612 ## ------------------------------------------------------------------------
614 AC_DEFUN([AC_FIND_FILE],
621 if test -r "$i/$j"; then
629 dnl just a wrapper to clean up configure.in
630 AC_DEFUN([LYX_PROG_LIBTOOL],
632 AC_REQUIRE([AC_ENABLE_SHARED])
633 AC_REQUIRE([AC_ENABLE_STATIC])
634 dnl libtool is only for C, so I must force him
635 dnl to find the correct flags for C++
637 ac_save_cflags="$CFLAGS"
640 AM_PROG_LIBTOOL dnl for libraries
642 CFLAGS="$ac_save_cflags"
646 ## ------------------------------------------------------------------------
647 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
648 ## one or two arguments.
650 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
651 ## ------------------------------------------------------------------------
653 AC_DEFUN([AC_FUNC_MKDIR],
654 [AC_CHECK_FUNCS([mkdir _mkdir])
655 AC_CACHE_CHECK([whether mkdir takes one argument],
656 [ac_cv_mkdir_takes_one_arg],
658 #include <sys/stat.h>
663 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
664 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
665 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
666 [Define if mkdir takes only one argument.])